我正在尝试编写一个每天自动运行的批处理脚本来执行以下操作:
- 将超过 2 天的文件从主目录(Jason)移动到存档目录。
- 压缩存档目录中超过 1 周的文件,并从此目录中删除超过 6 个月的文件。
- 我想从不同的目录(而不是包含文件的目录)运行该脚本。
我编写了以下脚本但它不能正常工作。
REM 将超过 2 天的文件移动到存档目录 robocopy D:\Agentrics\integration\incoming\Jason D:\Agentrics\integration\incoming\Jason\archive /MOV /MINAGE:2
问题:
- 我怎样才能将下面的命令更改为压缩超过 1 周的文件?
- 压缩文件是否可以具有与原始文件相同的创建日期和时间?
REM zip 备份目录中的所有文件 对于 (*.TXT*, *.cpi*) 中的 %%A,请执行 "C:\Program Files\WinRAR\WinRAR.exe" a -r "%%~nA.zip" "%%A" 对于 (*.TXT, *.cpi) 中的 %%A,删除 "D:\Agentrics\integration\incoming\Jason\archive\.cpi*" "%%A" REM 删除备份目录中所有超过 6 个月的文件 forfiles /p D:\Agentrics\integration\incoming\Jason\archive /s /m *.* /d -500 /c “cmd /c del /q @path”
答案1
如果我是你,我不会使用 for 循环来实现这一点。我更喜欢 @harper 提出的方法,但你仍然想要以下方法:
REM move files older than 2 days to an archive directory
forfiles /P D:\Agentrics\integration\incoming\Jason /M *.txt /S /D -2 /C "cmd /c move @file D:\Agentrics\integration\incoming\Jason\archive"
forfiles /P D:\Agentrics\integration\incoming\Jason /M *.cpi /S /D -2 /C "cmd /c move @file D:\Agentrics\integration\incoming\Jason\archive"
REM zip all files in the backup directory
for /f "tokens=*" %%a in ('forfiles /p D:\Agentrics\integration\incoming\Jason\archive /s /d -7') do "C:\Program Files\WinRAR\WinRAR.exe" a -r "%%~nA.zip" "%%a"
REM Delete all files in the backup directory that are older than 6 months
for /f "tokens=*" %%a in ('forfiles /p D:\Agentrics\integration\incoming\Jason\archive /s /d -183') do del D:\Agentrics\integration\incoming\Jason\archive\%%a /y