2013-10-18 46 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將失敗,因爲所有重命名操作都嘗試使用相同的文件名。