0
P1=c:\users\a\
P2=c:\users\b\
Q1=c:\users\c\
Q2=c:\users\d\
olderthan=7

P1 和 P2 是源目录 Q1 和 Q2 是目标目录

此逻辑背后的目的是从 P1 和 P2 目录中查找超过 7 天的文件。那些旧文件应该复制到 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%

但是如何使用 for 循环或任何其他逻辑为 P1 到 Q1 以及 P2 到 Q2 做到这一点?

4

1 回答 1

0

没有任何单个循环可以处理多个源和目标对。您需要分别对每一对应用相同的逻辑。也许一个子程序会简化事情。

您可以通过将 XCOPY 和 DEL 命令替换为单个 MOVE 命令来简化逻辑。

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

你真的应该考虑使用 ROBOCOPY 而不是 FORFILES。它应该表现更好,并且非常灵活。与 FORFILES 一样,您需要为每个源/目标对调用一次 ROBOCOPY。

于 2012-08-27T12:42:52.037 回答