2016-09-24 57 views
0

我想在Windows中一次執行三個批處理命令:robocopy,cdren。例如,我想將文件複製到另一個目錄,然後在名稱後面添加.bak。我用&&堆棧的命令:不能堆棧robocopy和ren

robocopy C:\original D:\backup && cd D:\backup && ren * *.bkp

但是,好像如果我只是在這第一位鍵入命令提示符:

robocopy C:\original D:\backup && cd D:\backup

目錄不實際更改。我需要手動插入第二個命令。

我還試圖

robocopy C:\original D:\backup && ren D:\backup\* *.bkp

再次,如果我分別手動執行的命令它僅適用。如果我執行整個命令,則只執行第一個位(robocopy)。

+0

不能使用'ren'將文件移動到不同的驅動器的所有消息。使用'move'代替。 – SomethingDark

+1

'cmd1 && cmd2'表示「如果cmd1成功,則只運行cmd2」,而'cmd1&cmd2'則表示「運行cmd1,然後運行cmd2」。 – SomethingDark

+0

@SomethingDark我很抱歉,我在這裏輸入了錯誤的命令。在那裏,它現在應該被修復。 –

回答

1

&&表示僅當前面的命令是成功(或返回了0的錯誤級別)時才執行下一個命令。同樣,||只執行下一個命令,如果前面的命令失敗(或返回一個錯誤級別大於0

一些例子是:

copy null null || echo this command failed 

rundll32   && echo this command was successful 

copy 1.txt 2.txt && echo success || echo failed 


所以,如果你想copy文件,change目錄,然後rename一個文件,你會做類似的東西:

robocopy C:\original D:\backup & cd D:\backup & ren * *.bkp 

記住,如果robocopy無法複製只是1文件(或更多),那麼你不能使用&&

更健壯的選項會檢查是否存在D:\backup

(robocopy C:\original D:\backup & if exist "D:\backup" (pushd D:\backup & ren * *.bkp) else (echo Failed to create D:\backup 2>nul)) >nul

它將pushd進入目錄,且僅當robocopy命令成功,將這些文件改名,還躲在除了錯誤

+3

*請記住,如果robocopy無法複製一個文件* - 它比這更糟糕。正如你所指出的那樣,'||'和'&&'操作符假定返回碼爲零意味着成功,非零意味着失敗。但是Robocopy不遵循該慣例,4或更高的返回值意味着失敗。如果我沒有記錯,只有在沒有需要複製的文件時纔會返回零。 –