2014-04-27 154 views
5
@ECHO OFF 

SET backdir=backup 
SET snapshotdir=snapshots 
SET worldprefix=world_ 
SET itdate=%date:~10,4%-%date:~4,2%-%date:~7,2% 
SET hour=%time:~0,2% 

IF "%hour:~0,1%" == " " SET hour=0%hour:~1,1% 

echo Current date: %itdate%. Current hour: %hour%. Current Minute:Second: %time:~3,2%:%time:~6,2% 

    forfiles /m "%worldprefix%*" /c (
     echo Copying World: @path 
     cmd /c xcopy /e /c /h /i /v /r /y /q @file %snapshotdir%\@file\%itdate%-%hour%-%time:~3,2%-%time:~6,2% 
     cmd /c xcopy /e /c /h /i /v /r /y /q @file %backdir%\%itdate%D\worlds\@file 
    ) 

echo Copying Plugins 
xcopy /e /c /h /i /v /r /y /q plugins %backdir%\%itdate%D\plugins\ 
xcopy /e /c /h /i /v /r /y /q %backdir%\%itdate%D %backdir%\%itdate%-%hour%H\ 

echo Backup Complete (assuming no errors above). Attempting to remove old files.. 
forfiles /p "%snapshotdir%" /c "cmd /c rmdir /s /q @path" /d -7 
forfiles /p "%backdir%" /m "*H" /c "cmd /c rmdir /s /q @path" /d -2 
forfiles /p "%backdir%" /m "*D" /c "cmd /c rmdir /s /q @path" /d -14 

PAUSE 

我想讓它以「world_」作爲前綴複製所有文件。它意識到了這一點,但是當我嘗試在循環中使用多個命令時遇到了問題。你可以用FOR命令來做到這一點,所以我認爲它的用法是一樣的。有人可以向我提供指導,我會解決這個問題。我可以爲每個文件運行3次forfile命令,但這不可能是正確的做法嗎?如何批量使用forfiles命令使用多個命令

回答

4

這兩個命令完全沒有任何共同之處,所以不,你不能使用那樣的括號。

您必須在單個CMD/C中執行所有命令。您可以使用&在一行上連接命令。我定義了一個簡單的XCOPY「宏」來保存一些輸入。

set XCOPY=xcopy /e /c /h /i /v /r /y /q" 
forfiles /m "%worldprefix%*" /c "cmd /c echo Copying World: @path&%XCOPY% @file %snapshotdir%\@file\%itdate%-%hour%-%time:~3,2%-%time:~6,2%&%XCOPY% @file %backdir%\%itdate%D\worlds\@file" 

如果您轉義了引號,那麼您可以使用行連續來分割多行中的邏輯行。但是你也必須逃脫&

set XCOPY=xcopy /e /c /h /i /v /r /y /q" 
forfiles /m "%worldprefix%*" /c ^"cmd /c^
echo Copying World: @path ^&^ 
%XCOPY% @file %snapshotdir%\@file\%itdate%-%hour%-%time:~3,2%-%time:~6,2% ^&^ 
%XCOPY% @file %backdir%\%itdate%D\worlds\@file^" 

或者你可以把&在該行的前面,這樣你不需要逃避它。該行還繼續逃逸下一行的第一個字符:

set XCOPY=xcopy /e /c /h /i /v /r /y /q" 
forfiles /m "%worldprefix%*" /c ^"cmd /c^
echo Copying World: @path^ 
&%XCOPY% @file %snapshotdir%\@file\%itdate%-%hour%-%time:~3,2%-%time:~6,2%^ 
&%XCOPY% @file %backdir%\%itdate%D\worlds\@file^" 
+1

「複製世界:」 ERROR:無效的參數/選項 - 「@file 」。 輸入「FORFILES /?」供使用。 無效的開關 -/q「@file backup \ 2014-04-28D \ worlds \ @file」 「複製插件」 這似乎不起作用,我試過你的方法之前去For循環描述的方法,他們似乎都不起作用。 – Brandon

+0

@MegaSniperB - 哎呀 - 我在文中談到了需要的CMD/C,然後忘記在我的代碼中使用它。現在應該修好了。 – dbenham

1

我意識到這是一個老帖子,但這樣做的另一種方法是調用批處理文件,並通過它,它需要的參數。我不相信這個批處理文件中有什麼限制。例如:

FORFILES/M 「* .IMG」/ C 「CMD/C ProcessFile.bat @file @fdate @ftime」