问题
I have a large folder of .cbr's, and I'm renaming them by issue number to correctly order them. What do I need to include in the ren line to have each file increment the number in the file name via windows command prompt? I'll be doing this frequently so I'll make this a .bat file.
For example, where n = initial number and m = final number: n.cbr, (n+1).cbr, ..., (m-1).cbr, m.cbr
The .bat thusfar:
ren *.cbz *.cbr
ren *.cbr <increment numbers n through m>.cbr
Alternatively, how do I trim each file name so that only the numbers are left before the extension? (from issue1.cbr to 1.cbr) via either a .bat or script host file?
回答1:
Try this batch script.
@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
)
It renames all the files with a incremental counter. The order of the files is preserved with the /OD
option of the DIR
command, that sorts the files list by its modified timestamp.
After careful testing, remove the ECHO
command.
For more information, read HELP DIR
, HELP SET
and HELP FOR
.
回答2:
:: REN-sec.cmd ==> Rename files to increment numbers
:: Inspired on -> http://stackoverflow.com/questions/6322329#6324312
:: - (cX) 2017 adolfo.dimare@gmail.com
:: -> CAVEAT: Works on CURRENT directory!
:: - Tested on Win10 64bits
@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 Execute several times to rename 'crazy' left overs...
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 EXISTS "%%~A"
REM if not exist "%~2!_count!%~3%%~xA" echo MISSING %~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 USAGE EXAMPLE
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 Rename files to increment numbers
echo.
echo CAVEAT: Works only in CURRENT directory!
echo.
echo %0 [/r] *.ext [prefix] [sufix]
echo: /? Help screen
echo /r Recurse in directories
echo *.ext Simple wildcard (like *.mp3) [NOT *.a.txt]
echo prefix Prefix to rename number
echo sufix sufix to rename number
echo.
echo When "" is used as prefix no prefix is put before the increment number
echo.
echo X:\Dir\SubDir\^> %0 [/r] [wildcard] [prefix] [sufix]
goto _out
:_out
:: REN-sec.cmd ==> End of file
来源:https://stackoverflow.com/questions/6322329/bat-for-batch-rename-to-increment-numbers-in-fname