我正在寻找一种方法来根据上次修改日期的时间跨度压缩文件夹,然后将其删除
结构如下
Folder_1 01.01.2012 12:00
- sub1
- sub2
- file1
- file2
Folder_2 01.01.2012 12:02
...
Folder_20202 05.05.2012 03:00
我现在想要:
到目前为止,我最好的想法是使用forfiles.exe(只需要一个日期),使用生成的日期(3个月前的第一天并使用旧的修饰符)并创建resultext文件。然后使用resultfile作为7zip.exe的导入,然后以某种方式循环文件并删除文件夹(对于第2部分和第3部分,我还没有工作代码)
- 更新 -
目前我正在尝试:
FORFILES /P H:\Temp\2zip /M O* /D -31.4.2012 /C "cmd /c C:\Program Files (x86)\7-Zip\7z.exe a -t7z H:\temp\x2.zip @path
这似乎有效 - 但速度非常慢(我猜理由是映射驱动器 - > 3小时150MB)
答案 0 :(得分:0)
使用文件夹的上次修改日期时要小心。在FAT文件系统上,当文件夹的内容发生更改时,时间戳不会更改。
在NTFS文件系统上,只要在文件夹中创建或删除文件或文件夹,就会更新上次修改日期。但是,如果修改了文件,或者在子文件夹中创建或删除了文件/文件夹,则不会更新。
如果您仍想继续推进您的计划,那么您的基本策略非常可靠。 Windows批处理对于处理日期的支持非常弱,因此没有太大的改进空间。
无论语言环境如何,解析当前日期(以及您希望的时间)的最佳方法是使用WMIC:
for /f "skip=1" %%A in ('wmic os get localdatetime') do (
set currentDateTime=%%A
goto :exitLoop
)
:exitLoop
set year=%currentDateTime:~0,4%
set month=%currentDateTime:~4,2%
您应该可以使用7zip的移动选项,这样您之后就不需要删除该文件夹了。
通过使用FOR / F处理FORFILES的结果,您应该能够消除对临时文件的需求。或者更好的是,您可以使用FORFILES / C选项指定适当的7zip命令。