Bonjour,
J'écris en ce moment mon premier script batch et je m'arrache les cheveux...
Le but: automatiser le renommage de fichiers docx de la forme AA_BB_CC en CC_AA.
J'ai testé 2 méthodes, et j'ai un problème dans les deux. Pouvez-vous m'aider à trouver ce qui cloche svp?
- 1er essai: appel d'une subroutine
Problème: la boucle tourne une fois de trop ! Tous les fichiers sont renommés puis, le 1er fichier a avoir été renommé est renommé à nouveau avant que le programme ne quitte.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| @echo off
SETLOCAL enableExtensions enableDelayedExpansion
title Renommage de fichiers PDF automatique
mode con cols=80 lines=16
color B
rem MAIN BATCH FILE PROGRAM----------------------------------
rem Selection du repertoire contenant les fichiers à renommer
set /p repertoire=Saissez le chemin absolu du repertoire:
rem Parcours de tous les fichiers du répertoire
for %%f in (%repertoire%\*.docx) do call :process %%~nf
goto :EOF
:process
set old_file_name=%1
rem Extraction des elements du nom de fichier
for /f "tokens=1,2,3 delims=_" %%a in ("%old_file_name%") do (
set new_name_part_2=%%a
set new_name_part_3=%%b
set new_name_part_1=PO%%c
)
rem Construction du nouveau nom de fichier
set new_file_name=%new_name_part_1%_%new_name_part_2%
rem renommage du fichier
ren %repertoire%\%old_file_name%.docx %new_file_name%.docx
echo Fichier %1 renomme en %new_file_name%!
pause > nul
goto :EOF |
- 2eme essai: sans subroutine
Résultat: "Fichier AA_BB_CC renomme en _"
Problème: les variables de la deuxième boucle for sont perdues à la sortie de cette même boucle...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| @echo off
SETLOCAL enableExtensions enableDelayedExpansion
title Renommage de fichiers PDF automatique
mode con cols=80 lines=16
color B
rem MAIN BATCH FILE PROGRAM----------------------------------
rem Selection du repertoire contenant les fichiers à renommer
set /p repertoire=Saissez le chemin absolu du repertoire:
rem Parcours de tous les fichiers du répertoire
for %%f in (%repertoire%\*.docx) do (
set old_file_name=%%~nf
rem Extraction des elements du nom de fichier
for /f "tokens=1,2,3 delims=_" %%a in ("%old_file_name%") do (
set new_name_part_2=%%a
set new_name_part_3=%%b
set new_name_part_1=PO%%c
)
rem Construction du nouveau nom de fichier
set new_file_name=!new_name_part_1!_!new_name_part_2!
rem renommage du fichier
ren %repertoire%\%old_file_name%.docx !new_file_name!.docx
echo Fichier %%~nf renomme en !new_file_name!!
pause > nul
)
echo Attention je vais quitter
pause > nul
goto :EOF |
Je suis à cours d'idée... Merci d'avance pour votre aide!
Partager