2012-08-27 264 views
0
P1=c:\users\a\ 
P2=c:\users\b\ 
Q1=c:\users\c\ 
Q2=c:\users\d\ 
olderthan=7 

P1和P2源目錄 Q1和Q2是目標目錄批處理文件的Windows

這種邏輯背後的目的是尋找這是7天以上的,從P1和P2 directroy文件。這些舊文件應該被複制到Q1和Q2中,並從P1和P2中刪除。

我以下面的邏輯做它P1至Q1:

FORFILES -p %P1% /d -%olderthan% -m *.%extension% -c "CMD /C XCOPY %P1%\@FILE %Q1%" 
FORFILES -p %P1% /d -%olderthan% -m *.%extension% -c "CMD /C if exist %Q1%\@FILE del %P1%\@FILE /Q & echo @FILE Deleted." >> %loglocation% 

但如何做到這一點的P1使用的循環或任何其他邏輯Q1以及P2到Q2?

+0

使用純CMD批處理文件需要從'FOR'命令循環中的'DIR'命令解析每個日期。如果您擔心性能,則可能需要使用* VBScript *。 – Jay

+0

我只需要CMD批處理文件。不想VB腳本........ – Kingsters

回答

0

沒有任何單個循環可以處理多個源和目標對。您需要將相同的邏輯單獨應用於每對。一個子程序可能會簡化一些事情。

通過用單個MOVE命令替換XCOPY和DEL命令,可以簡化您的邏輯。

FORFILES/D選項使用「小於或等於」邏輯,而不是「小於」。如果您確實想移動超過7天的文件夾,則需要使用值8來代替。

我已經在路徑中添加了引號,以防萬一您得到包含空格的路徑。引號需要在命令字符串中加倍。

我通過使用文件掩碼參數而不是擴展參數使得例程更加靈活。

@echo off 
call :moveOldFiles c:\users\a *.txt 7 c:\users\c >>mylog.log 
call :moveOldFiles c:\users\b *.txt 7 c:\users\d >>mylog.log 
exit /b 

:moveOldFiles sourceDir extension minAgeInDays destinationDir 
forfiles /p "%~f1" /m %2 /d -%3 -c "cmd /c move /y @path ""%~f4\"" && echo @path moved to "%~f4""" 
exit /b 

你真的應該考慮使用,而不是FORFILES ROBOCOPY。它應該表現更好,而且非常靈活。與FORFILES一樣,您需要爲每個源/目標對調用一次ROBOCOPY。

+0

編輯 - 使用'&&'代替'&'所以消息只在移動成功時纔會輸出 – dbenham

+0

感謝您的快速響應。將文件移動到文件夾c和d。我想壓縮文件。如何製作這個? Zip文件名應該是當前的日期和年份。提前致謝。 – Kingsters