2013-10-18 47 views
1

我试图用一个for循环重命名文件批量使用循环

::@Echo Off 
setlocal enableDelayedExpansion 
::Set Date 
set mydate=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2% 
::Rename file 
for %%F in (D:\Data\*.bak) do (
    ren %%F D:\Data\prod_live_Full_%mydate%0000.Lts.bak 
) 

我不断收到无效的指令错误重命名文件。任何帮助表示赞赏。

+0

如果d:\ data中有多个.bak文件,是不是会尝试将它们重命名为完全相同的东西? –

回答

0

修改目录中的文件时,请使用dir中的静态文件列表,而不要使用for中的动态文件列表。否则,你会陷入无限循环。

@echo Off 
setlocal 
set "mydate=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%" 
pushd "D:\Data\" && for /f "delims=" %%A in ('dir /a-d /b *.bak') do (
    ren "%%~fA" "prod_live_Full_%mydate%0000.Lts.bak" 
) 
popd 
endlocal 
exit /b 0 

该错误是由您的ren命令的第二个参数引起的。它只需要一个新的文件名,而不是完整的路径和文件名。 ren命令不能移动文件。

+0

工作完美!感谢一堆! – user1879961

0

我不知道你的日期格式,但如果日期切割的逻辑不正确(在我的电脑中,西班牙语,它不起作用),mydate变量可以包含一个斜杠,这是不允许的一个文件名。

如果存在多个文件,则ren将失败,因为所有重命名操作都尝试使用相同的文件名。