用 4 位数字顺序重命名文件 - .bat

Renaming files sequentially with 4 digits - .bat

我正在寻找我的问题的解决方案,在我正在使用的脚本下方,我在这里找到它,对其进行了更改,它按照我想要的方式工作,但现在我想这样做,我正在努力寻找答案。

示例:

<br>Open_university_MS221_0001.tif</br>
<br>Open_university_MS221_0001-2.tif</br>
<br>Open_university_MS221_0002.tif</br>
<br>Open_university_MS221_0002-2.tif</br>
<br>etc.</br>
<br>Open_university_MS221_0001.tif</br>
<br>Open_university_MS221_0002.tif</br>
<br>Open_university_MS221_0003.tif</br>
<br>Open_university_MS221_0004.tif</br>
<br>etc.</br>
@echo off
setlocal enableextensions enabledelayedexpansion
set /a count=1
for %%f in (*.tif) do (
    set FileName=%%~nf
    set FileName=000!count!
    set FileName=!FileName:~-4!
    for /F "tokens=1-3 delims=_+" %%g in ('dir /b /od *.tif') do ( 
        set prefix=%%g_%%h_%%i
    )
    set FileName=!prefix!_!Filename!%%~xf
    rename "%%f" "!FileName!"
    set /a count+=1
)

当您在进入循环之前将计数器初始化为 10000 时,您可以去掉循环中的很多代码。然后在循环中,您只需使用 !count:~-4!

@echo off
setlocal enableextensions enabledelayedexpansion
set /a count=10000
for %%f in (*.tif) do (
    for /F "tokens=1-3 delims=_+" %%g in ('dir /b /od *.tif') do ( 
        set prefix=%%g_%%h_%%i
    )
    set /a count+=1
    set FileName=!prefix!_!count:~-4!%%~xf
    rename "%%f" "!FileName!"
)

代码可以进一步缩短,但会牺牲可读性。

哦 - 我向上移动了 set /a count+=1 以避免以 0000 开头(您的示例表明,您不希望这样)

下面的工作解决方案,感谢为我指路的 achipfl 和 Stephan

@echo off

setlocal enableextensions enabledelayedexpansion

set "psCommand="(new-object -COM 'Shell.Application')^
.BrowseForFolder(0,'Please choose a folder.',0,0).self.path""
for /f "usebackq delims=" %%i in (`powershell %psCommand%`) do set "folder=%%i"

cd %folder%

set path=%folder:~1%
    for %%i in ("%path%") do (
        set "parent=%%~ni"
    )

set /a count=10000
    for /F "eol=| delims=" %%f in ('dir /B /A:-D-H-S /O:N "*.tif"') do (
        set /a count+=1
        set fileName=!parent!_!count:~-4!%%~xf
        rename "%%f" "!fileName!"
)

exit /b