[batch] Agir sur fichiers selon partie nom

Résolu
danieliiitooo Messages postés 20 Statut Membre -  
danieliiitooo Messages postés 20 Statut Membre -
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,
Configuration: Windows XP
Internet Explorer 7.0

3 réponses

  1. cs-bilou Messages postés 836 Statut Membre 164
     
    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
  2. cs-bilou Messages postés 836 Statut Membre 164
     
    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
  3. danieliiitooo Messages postés 20 Statut Membre 1
     
    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