我有幾個目錄,命名爲「A」,「B」,「C」,等子目錄的文件。每個文件都包含一些文件。我喜歡使用目錄名稱加在每個目錄以1開始的索引號來重命名中的每個目錄中的文件,與左零填充到3的寬度例如: Sub目錄A具有3個文件,並且它們會被重新命名如:重命名使用子目錄名稱以重新開始遞增的數字爲每個子目錄
A_001.dat
A_002.dat
A_003.dat
Sub目錄B有2個文件,而且應該更名爲:
B_001.dat
B_002.dat
等。這些文件將被移至主目錄。我有以下批處理文件,但似乎無法增加數字。請幫忙。
@echo off
set HomeFolder=%CD%
set OldExt=TXT
set NewExt=DAT
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in ('dir *.%OldExt% /b /s') do (
set i=1
for /f "delims=" %%b in ("%%~dpa\.") do (
set pad=00!i!
set str=!pad:~-3!
echo move /b "%%a" "%HomeFolder%\%%~nxb_!str!.%NewExt%"
set /A i=!i!+1
)
)
endlocal
pause
和正確的答案是:!
@echo off
set HomeFolder=%CD%
set OldExt=TXT
set NewExt=TIF
set i=1
set Folder=
set LastFolder=
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in ('dir *.%OldExt% /b /s') do (
for /f "delims=" %%b in ("%%~dpa\.") do (
set Folder=%%~nxb
if NOT !Folder!==!LastFolder! (set /A i=1)
set LastFolder=!Folder!
set pad=00!i!
set str=!pad:~-3!
copy /b "%%a" "%HomeFolder%\%%~nxb_!str!.%NewExt%"
Set /A i+=1
)
)
endlocal
試了一下,沒有工作,結果都是一樣的 move/b「C:\ Test \ A \ 001.txt」「C:\ Test \ A_.DAT」 move/b「C:\ Test \ A \ 002.txt」「C:\ Test \ A_。 DAT「 move/b」C:\ Test \ A \ 003.txt「」C:\ Test \ A_.DAT「 move/b」C:\ Test \ A \ 004.txt「」C:\ Test \ A_DAT「 move/b」C:\ Test \ B \ 001.txt「」C:\ Test \ B_.DAT「 move/b」C:\ Test \ B \ 002.txt「」C:\ Test \ B_.DAT「 move/b」C:\ Test \ B \ 003.txt「」C:\ Test \ B_.DAT「 move/b」C:\ Test \ B \ 004.txt「」C :\ Test \ B_DAT「 move/b」C:\ Test \ B \ 005.txt「」C:\ Test \ B_.DAT「 move/b」C:\ Test \ C \ 001.txt「 「C:\測試\ C_.DAT」 按任意鍵繼續。 。 。 – Mickey
您啓用了延遲擴展,但沒有使用它。 '%var%'是即時(正常)擴展。 '!var!'是延遲擴展。 – dbenham
我試過!VAR!它看起來更好,但我沒有得到增加,始終停留在1因此,新的名字總是_001.DAT。 – Mickey