【发布时间】:2015-10-12 05:43:18
【问题描述】:
我在 Windows 批处理文件中有以下要求。我搜索了很多,但找不到适合我要求的明确答案。
我需要根据日期压缩一些文件/文件夹(文件/文件夹名称将包含此日期)。日期格式为YYYYY-MM-DD。有许多文件组,其中只有日期更改。
例如:
第一组:ABCE2GDX2015-10-07ACCEQABCE2GDX2015-10-06ACCEQABCE2GDX2015-10-05ACCEQABCE2GDX2015-10-04ACCEQ
第 2 组:HRCDGHHGGFGHJJHGGG2015-10-0625HRCDGHHGGFGHJJHGGG2015-10-0425HRCDGHHGGFGHJJHGGG2015-10-0225HRCDGHHGGFGHJJHGGG2015-09-3025
在上面的示例中,我需要压缩然后删除除前 2 个文件/文件夹之外的文件/文件夹。
HRCDGHHGGFGHJJHGGG2015-10-0225 - 应该放在 2015-10-02.zipHRCDGHHGGFGHJJHGGG2015-09-3025 - 应该放在 > 2015-09-30.zipABCE2GDX2015-10-05ACCEQ - 应该放在 2015-10-05.zipABCE2GDX2015-10-04ACCEQ - 应该放在在 2015-10-04.zip
我不应该碰的剩余文件。
如何做到这一点?我目前的想法是
- 将
dir的内容列出到文件中 - 将文件名中的第一行日期部分单独替换为
* - 列表在第二个文件中匹配
- 删除第一个文件中的匹配行
- 按日期压缩,第二个文件的前 2 行除外
- 然后转到第一个文件的第二行,依此类推。
我在这里遇到的问题是我不知道如何将日期单独替换为 * 并在文件中进行搜索。
请注意,PowerShell 不是一个选项。我需要使用批处理或 VBScript 或两者混合来完成。
【问题讨论】:
-
不是前 2 名,可以是最小年龄的文件夹吗?然后
forfiles或robocopy应该可以解决问题。 -
如果没有外部正则表达式工具,这里很难找到模式
-
Batch 在我看来是错误的选择(除非您也可以使用第三方工具);是唯一支持某种正则表达式的
findstr,但这有几个问题并且记录不充分......
标签: windows batch-file vbscript