Endoro 为上述问题提供了一个很好的工作解决方案。另一种选择是简单地将 PUSHD 推送到文件所在的位置。然后,您不再需要在代码的其余部分中包含路径。
与问题无关的其他要点:
将 counter 初始化为 0 可能是个好主意,以防万一其他进程已经将该值设置为一个数字。
你真的不需要这个nname
变量。
我更喜欢将计数器值传输到 FOR 变量,这样我就不需要使用 CALL 构造。(对于那些不知道的人,延迟扩展切换是为了保护!
文件名中可能存在的字符)。
@echo off
setlocal
set "name1=Bart"
set "name2=Carl"
set "name3=Judy"
pushd "C:\Users\%username%\Downloads"
set /a counter=0
for /f "delims=" %%a in ('dir Export_*.csv /b /a-d /o-d') do (
set "fname=%%~a"
set /a counter+=1
setlocal enableDelayedExpansion
for %%N in (!counter!) do (
endlocal
ren "!fname!" "!name%%N!.csv"
)
)
popd
最后,带有 /N 选项的 FINDSTR 可以消除对 CALL 或附加 FOR
@echo off
setlocal
set "name1=Bart"
set "name2=Carl"
set "name3=Judy"
pushd "C:\Users\%username%\Downloads"
for /f "tokens=1* delims=:" %%A in (
'dir Export_*.csv /b /a-d /o-d ^| findstr /n "^"'
) do (
set "fname=%%~B"
setlocal enableDelayedExpansion
ren "!fname!" "!name%%A!.csv"
endlocal
)
popd