2012-08-27 266 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