我有几个目录,命名为“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