Aide pour finir mon script

Résolu
Bonjour,

Je vais essayer d'être claire, je souhaite faire un script qui a pour but de copier des fichiers à partir d'un répertoire vers un nouveau répertoire, et que dans ce nouveau répertoire le nom des fichiers ne soient pas conserver en entier.

Etape du script :

- Tout d'abord, l'utilisateur va saisir une date (ex : 23/11/2011)
- Le script va mettre cette date au format 20111123
- Créer un nouveau dossier dans C:\Temp\20111123
- Va copier le répertoire qui se trouve dans C:\Docs and settings\Utilisateur\Bureau\20111123 pour le Coller dans C:\Temp\20111123 (créé ci-dessus)

Jusqu'ici, tout va bien mon script fonctionne bien, voilà le script :

set /p JJMMAAAA= Qu'elle est la date a editer ? (sous le format : JJ/MM/AAAA)
REM je demande à l'utilisateur de renseigner la date à imprimer

for /f "tokens=1-3 delims=/" %%f in ("%JJMMAAAA%") do (
set AAAAMMJJ=%%h%%g%%f)
REM permet de supprimer les '/' et d'inverser le format de la date (résultat obtenu : AAAAMMJJ)

mkdir c:\temp\%AAAAMMJJ%
REM permet de créer un répertoire nommé avec la date à éditer au format AAAAMMJJ

xcopy C:\"Documents and Settings"\utilisateur\Bureau\%AAAAMMJJ% c:\temp\%AAAAMMJJ%
REM permet de copier le contenu d'un répertoire vers un autre


Mais par la suite, je veux que les fichiers qui se trouvent dans le nouveau répertoire, ne gardent qu'une partie de leur nom. Ils ont la forme suivante :

A01390_01G01_F040_20111123092139_518426312.pdf
A02000_03F01_F015_20111122150943_518345827.pdf
A02200_04C02_F040_20111123071918_518368403.pdf...

Je voudrais les renommer en enlevant les '_' et en conservant uniquement 2 parties et le .pdf, c'est à dire :

F04020111123092139.pdf
F01520111122150943.pdf
F04020111123071918.pdf...

Est-ce que cela est possible, si c'est le cas, est-ce que vous pouvez m'aider pour la suite du script?

Merci pour votre aide

8 réponses

  1. Super avec nb comme ceci : !nb!, ça fonctionn,

    Je vous remercie pour votre aide
    1. Contributeur
      comme ça:
      setlocal enableDelayedExpansion
      set /a nb=1
      for /f "delims=_ tokens=1,2,3,4,5" %%a in ('dir /b C:\temp\%AAAAMMJJ%\*.pdf') do (
      ren C:\temp\%AAAAMMJJ%\%%a_%%b_%%c_%%d_%%e %%a_%%d.pdf
      set /a nb+=1 
      echo !nb!
      ) 
      
      1. Bonjour,

        Voilà mon nouveau script :

        set /p JJMMAAAA= Qu'elle est la date a editer ? (sous le format : JJ/MM/AAAA) 
        REM je demande à l'utilisateur de renseigner la date à imprimer 
        
        for /f "tokens=1-3 delims=/" %%f in ("%JJMMAAAA%") do (
        set AAAAMMJJ=%%h%%g%%f)
        REM permet de supprimer les '/' et d'inverser le format de la date (résultat obtenu : AAAAMMJJ)
        
        mkdir c:\temp\%AAAAMMJJ%
        REM permet de créer un répertoire nommé avec la date à éditer au format AAAAMMJJ
        
        xcopy "C:\Documents and Settings\utilisateur\Bureau\%AAAAMMJJ%" "C:\temp\%AAAAMMJJ%"
        REM permet de copier le contenu d'un répertoire vers un autre
        
        for /f "delims=_ tokens=1,2,3,4,5" %%a in ('dir /b C:\temp\%AAAAMMJJ%\*.pdf') do (
        ren C:\temp\%AAAAMMJJ%\%%a_%%b_%%c_%%d_%%e %%a_%%d.pdf
        ) 
        
        pause


        Le script fonctionne très bien comme ça.

        Mais maintenant, je voudrais incrémenter une variable pour l'ajouter au nom mais ça n'incrémente pas, ça reste à 1

        set /p JJMMAAAA= Qu'elle est la date a editer ? (sous le format : JJ/MM/AAAA) 
        REM je demande à l'utilisateur de renseigner la date à imprimer 
        
        for /f "tokens=1-3 delims=/" %%f in ("%JJMMAAAA%") do (
        set AAAAMMJJ=%%h%%g%%f)
        REM permet de supprimer les '/' et d'inverser le format de la date (résultat obtenu : AAAAMMJJ)
        
        mkdir c:\temp\%AAAAMMJJ%
        REM permet de créer un répertoire nommé avec la date à éditer au format AAAAMMJJ
        
        xcopy "C:\Documents and Settings\utilisateur\Bureau\%AAAAMMJJ%" "C:\temp\%AAAAMMJJ%"
        REM permet de copier le contenu d'un répertoire vers un autre
        
        set /a nb=1
        for /f "delims=_ tokens=1,2,3,4,5" %%a in ('dir /b C:\temp\%AAAAMMJJ%\*.pdf') do (
        ren C:\temp\%AAAAMMJJ%\%%a_%%b_%%c_%%d_%%e %%a_%%d.pdf
        set /a nb+=1 
        echo %nb%
        ) 
        
        pause 


        Est-ce que j'ai une erreur dans le script qui fait que ça ne fonctionne pas?

        Merci pour vos réponses
        1. @ dubcek : je n'ai pas tout compris mais en même, je ne me suis pas trop attardée ce que tu as écris,

          Toutefois je vois ça lundi ou mardi et je vous tiens au courant.

          Merci
          1. En effet, j'ai beaucoup de fichiers à renommer et je les copie dans un premier temps dans un autre répertoire car je ne veux pas travailler sur l'original (en cas de pertes de fichiers ou autre).

            Il me faut donc une boucle, là je bloque, je ne sais pas comment faire car en plus je ne veux conserver qu'une partie du nom du fichier et l'extension.

            Merci
            1. Contributeur
              hello
              pour renommer les fichiers
              C:> dir /b
              A01390_01G01_F040_20111123092139_518426312.pdf
              A02000_03F01_F015_20111122150943_518345827.pdf
              A02200_04C02_F040_20111123071918_518368403.pdf
              
              C:> aa
              
              C:> dir /b
              F01520111122150943.pdf
              F04020111123071918.pdf
              F04020111123092139.pdf
              
              C:> type aa.bat
              @ echo off
              
              for /f "delims=_ tokens=1,2,3,4,5" %%a in ('dir /b *.pdf') do (
              ren %%a_%%b_%%c_%%d_%%e %%c%%d.pdf
              )
              
              C:>
              1. Bonjour Dubeck,

                Ce que tu as mis ci-dessus, c'est un copier/coller des commandes que tu as écris dans le fenêtre invite de commandes?

                Merci
            2. Salut ;)

              Petite précision :

              xcopy C:\"Documents and Settings"\utilisateur\Bureau\%AAAAMMJJ% c:\temp\%AAAAMMJJ%

              Cette ligne est correcte, mais pas dans la mise en forme....

              Quand tu as un epsace, il faut mettre entre guillemet le chemin complet...

              Avec ceci, tu comprendras mieux :

              xcopy "C:\Documents and Settings\utilisateur\Bureau\%AAAAMMJJ%" ":\temp\%AAAAMMJJ%


              Car si tu as affaire à un titre à rallonge, sous windows XP, bourrée d'espace, deux guillemets suffisent : "CHEMIN" -> au lieu de mettre des guillemets là où il y a un espace.

              Ca va te permettre de gagner du temps au codage ;)

              @+
              1. Merci Franco pour la petite info
            3. Bonjour....

              En espérant que tu n'as pas beaucoup de fichier PDF ;)

              * la commande pour renommer : c'est ren

              Pour en savoir plus, ouvre l'invite de commande et tape ren /?

              Renomme un ou plusieurs fichiers.   
              
              RENAME [lecteur:][chemin]nom_de_fichier1 nom_de_fichier2.   
              REN [lecteur:][chemin]nom_de_fichier1 nom_de_fichier2.   
              
              Vous ne pouvez pas spécifier un nouveau lecteur pour votre destination.   
              


              Exemple :
              * Mon fichier 1 s'appelle premier et le second s'appelle second...
              * Ils sont sur C:\
              * Je veux les renommer en pdf1 et pdf2
              * je veux enfin les mettre sur c:\users\thomas\desktop,

              Ce que je ferais, c'est de les renommer, et ensuite de les déplacer :)

              Je fais donc ceci :

              cd c:\   
              ren premier.pdf pdf1.pdf   
              ren second.pdf pdf2.pdf   
              move "c:\pdf1.pdf" "c:\users\thomas\desktop"   
              move "c:\pdf2.pdf" "c:\users\thomas\desktop"   
              


              Ce n'est peut-être pas ce que tu cherches, mais si tu veux renommer, tu peux passer par la commande REN

              En tout cas, le petit code marche pour moi...
              A toi de l'adapter pour ton PC :)

              Si tu n'as pas beaucoup de fichier à renommer, c'est l'idéal ;)

              Sinon, on peut faire autrement :
              * Renommer chaque fichier
              * Faire une boucle de ces fichiers afin de les déplacer d'un coup

              @+

              Tiens moi au courant ;)

              EDIT :

              J'ai relus ton topic......

              Les fichiers sont déjà dans un répertoire :|

              Et je pense que ces fichiers, tu en as beaucoup, non ?

              ++