0

我正在寻找一种根据上次修改日期的时间跨度压缩文件夹并在之后删除它们的方法

结构如下

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

我现在要:

  1. 选择比本月早 3 个月的所有文件夹(例如 lastmodified 是 2 月,而 current 是 5 月)。重要的一点是我想使用第一个月到最后一个月而不是-90天
  2. 然后将所选文件夹及其所有子文件夹和文件压缩到一个 february2012.zip
  3. 删除(现在)压缩文件的原件

到目前为止,我最好的想法是使用 forfiles.exe(只需要一个日期),使用生成的日期(3 个月前的第一天并使用更早的修饰符)并创建一个 resultextfile。然后使用结果文件作为 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

这似乎工作 - 但只是非常缓慢(我猜原因是映射驱动器 - > 150MB 3h)

4

1 回答 1

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 命令。

于 2012-05-15T12:34:23.820 回答