3 votes

.bat pour renommer par lots pour incrémenter les nombres dans le nom de fichier

J'ai un grand dossier de fichiers .cbr et je les renomme par numéro de problème pour les classer correctement. Que dois-je inclure dans la ligne de renommage pour que chaque fichier incrémente le nombre dans le nom du fichier via l'invite de commande Windows ? Je ferai cela fréquemment donc j'en ferai un fichier .bat.

Par exemple, où n = nombre initial et m = nombre final : n.cbr, (n+1).cbr, ..., (m-1).cbr, m.cbr

Le .bat jusqu'à présent :

ren *.cbz *.cbr
ren *.cbr .cbr

Autrement, comment puis-je tronquer chaque nom de fichier pour ne laisser que les numéros avant l'extension ? ( de issue1.cbr à 1.cbr) via un fichier .bat ou script host ?

13voto

PA. Points 10538

Essayez ce script batch.

@echo off
setlocal enabledelayedexpansion
set /a count=0
for /f "tokens=*" %%a in ('dir /b /od *.cbr') do (
 echo ren "%%a" !count!.cbr
 set /a count+=1
)

Il renomme tous les fichiers avec un compteur incrémentiel. L'ordre des fichiers est préservé avec l'option /OD de la commande DIR, qui trie la liste des fichiers par son horodatage de modification.

Après des tests minutieux, supprimez la commande ECHO.

Pour plus d'informations, consultez AIDE DIR, AIDE SET et AIDE FOR.

0voto

Adolfo Points 41
:: REN-sec.cmd ==> Renommer les fichiers pour incrémenter les nombres
:: Inspiré par -> http://stackoverflow.com/questions/6322329#6324312
:: - (cX) 2017 adolfo.dimare@gmail.com
:: -> ATTENTION : Fonctionne dans le répertoire COURANT !
:: - Testé sur Win10 64 bits
@echo off

if (%1)==()   goto _help
if (%1)==(/?) goto _example

setLOCAL EnableDelayedExpansion
rem            EnableExtensions
if (%1)==(/r) goto _recursive
if (%1)==(/R) goto _recursive
goto _current_dir

:_recursive
for /d %%A in (*.*) do (
      cd "%%~A"
      call %~dpnx0 %1 %2 %3 %4
      rem echo returning -^> call %~dpnx0 %1 %2 %3 %4
      cd ..
)
shift
goto _current_dir

:_current_dir
set /a _count=0
for %%A in (%1) do (
    set /a _count+=1

    rem Exécuter plusieurs fois pour renommer les 'résidus fous'...
    FOR /L %%C IN (1,1,2) DO (
        if exist "%~2!_count!%~3%%~xA" call :skip_count %1 %2 %3 %AA
        if exist "%%~A" if not exist "%~2!_count!%~3%%~xA" ren "%%~A" "%~2!_count!%~3%%~xA"
    )
    if exist "%%~A" echo EXISTE "%%~A"
    REM if not exist "%~2!_count!%~3%%~xA" echo MANQUANT %~2!_count!%~3%%~xA
)
goto _out

:skip_count
    set /a _count+=1
    if exist "%~2!_count!%~3%%~x4" goto skip_count
goto _out

:_example
echo.
echo %0 EXEMPLE D'UTILISATION
echo.
echo X:\Dir\SubDir\^> dir /b
echo etc.
echo La La La.mp3
echo Le Le Le.mp3
echo Lo Lo Lo.mp3
echo Other.txt
echo.
echo X:\Dir\SubDir\^> %0 *.mp3 "" " - Su Fix"
echo.
echo X:\Dir\SubDir\^> dir /b
echo etc.
echo 1 - Su Fix.mp3
echo 2 - Su Fix.mp3
echo 3 - Su Fix.mp3
echo Other.txt
echo.

:_help
echo Renomme les fichiers pour incrémenter les nombres
echo.
echo ATTENTION : Fonctionne seulement dans le répertoire COURANT !
echo.
echo %0 [/r] *.ext [préfixe] [suffixe]
echo:  /?          Écran d'aide
echo   /r          Parcourir les répertoires
echo   *.ext       Jocker simple (comme *.mp3) [PAS *.a.txt]
echo   préfixe     Préfixe pour renommer le nombre
echo   suffixe     suffixe pour renommer le nombre
echo.
echo Lorsque "" est utilisé comme préfixe, aucun préfixe n'est mis avant le numéro d'incrémentation
echo.
echo X:\Dir\SubDir\^> %0 [/r] [joker] [préfixe] [suffixe]
goto _out

:_out
:: REN-sec.cmd ==> Fin du fichier

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X