[batch] Agir sur fichiers selon partie nom

Résolu/Fermé
danieliiitooo Messages postés 20 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 1 octobre 2010 - 13 mars 2009 à 17:11
danieliiitooo Messages postés 20 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 1 octobre 2010 - 16 mars 2009 à 11:19
Bonjour,

Une nouvelle problématique en batch (Je deviens fou...rhaaaa)

Dans le répertoire test\ se trouvent des fichiers nommés de la sorte:

aaaa_bbbb.pdf
aaaa_bbbb.pdf
aaaa_bbbb.pdf
aaaa_bbbb.pdf
aaaa_bbbb.pdf


ou aaaa et bbbb sont des caractères numeriques.


Le fichier listing.txt contient une liste de references de type

cccc
cccc
cccc
cccc

ou cccc sont des caractères numériques.

Je souhaiterai déplacer les fichiers dont cccc = bbbb dans le répertoire test2

Exemple:

for /F "tokens=1-2" %%a in (listing.txt) do move "test\%%b_%%a.pdf" "test2\%%b.sec"

Les contraintes étant:

Le fichier listing.txt ne contient qu'un seul et unique tokens et non deux. (Donc ma commande ne peut fonctionner)
Je dois à tout prix conserver le début du fichier (aaaa)

Voilà voilou, je m'en sort pas...

Raison pour laquelle je demande à l'aide.


Merci d'avance,

3 réponses

cs-bilou Messages postés 769 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 24 février 2011 164
13 mars 2009 à 18:34
Si j'ai bien compris tu a des fichier du style:
4685_4440.pdf
4685_4441.pdf
4685_4442.pdf
4685_4443.pdf

Et listing.txt avec dedans:
4684
4442
4862

Et si la deuxième partie de un des fichier pdf est egal a un nombre du fichier listing.txt sa déplace le fichier dans un autre dossier.
Donc dans cet exemple 4685_4442.pdf sera déplacé.

C'est bien sa ?
Merci
Bilou
0
cs-bilou Messages postés 769 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 24 février 2011 164
15 mars 2009 à 14:28
Bon se n'est pas grave tu ne répond pas.
Bon si c'est bien se que j'ai compris voila comment il faut faire.
Je te fait 2 exemple:
1er:

@echo off
setlocal enableDelayedExpansion

for /r "test\"  %%i in (*.pdf) do ( 
for /f  %%j in ('type test\listing.txt') do (
set i=%%~ni
set i1=!i:~0,4!
set i2=!i:~5,9!
if %%j==!i2! (
if not exist test2\ md test2\
move test\!i1!_!i2!.pdf .\test2\ > NUL
)
)
)
setlocal DisableDelayedExpansion

pause



2ème:
@echo off

for /f  %%i in ('type test\listing.txt') do ( 
if not exist test2\ md test2\
move test\????_%%i.pdf .\test2\ > NUL
)
pause


Pour les 2 exemple:
- Il faut mettre le batch a coter du dossier test.
- Et le fichier listing dans le dossier test avec les .pdf

PS:
Le nom du dossier avec les point signifie que tu revient au dossier parent.(Je c'est sa veut rien dire ^^)
Le m'explique.
Imaginons tu fait un batch avec:

@echo off
echo Salut >> .\salut.txt
pause


Et que se batch est dans c:\test
Si tu le lance le fichier salut.txt sera créé dans c:\
Car le point fait revenir au dossier parent, donc c:\
Tu peut très bien en mettre 2 ou 3.


Si tu met dans ton batch:
@echo off
echo Salut >> ..\salut.txt
pause


Et qu'il est dans c:\test\super-test
Le fichier salut.txt sera toujours dans c:\

Voila j'espère t'avoir aider même si tu ne répond pas.
Bilou
0
danieliiitooo Messages postés 20 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 1 octobre 2010 1
16 mars 2009 à 11:19
Milles excuses pour le retard Bilou.

Je n'ai testé que le deuxième exemple et celui-ci fonctionne parfaitement.

Je ne connaissais pas le coup des ???? pour les caractères variables.

Dans tous les cas, un grand grand grand merci pour le coup de main.

Daniel
0