根据文件名中的日期压缩文件

时间:2015-10-12 05:43:19

标签: windows batch-file vbscript

我在Windows批处理文件中有以下要求。我google了很多,但找不到符合我要求的明确答案。

我需要根据日期压缩一些文件/文件夹(文件/文件夹名称将包含此日期)。日期格式为YYYYY-MM-DD。有许多文件组,只有日期更改。

例如:

第1组:
ABCE2GDX2015-10-07ACCEQ
ABCE2GDX2015-10-06ACCEQ
ABCE2GDX2015-10-05ACCEQ
ABCE2GDX2015-10-04ACCEQ

第2组:
HRCDGHHGGFGHJJHGGG2015-10-0625
HRCDGHHGGFGHJJHGGG2015-10-0425
HRCDGHHGGFGHJJHGGG2015-10-0225
HRCDGHHGGFGHJJHGGG2015-09-3025

在上面的示例中,我需要压缩然后删除除前2位之外的文件/文件夹。

HRCDGHHGGFGHJJHGGG2015-10-0225 - 应放在 2015-10-02.zip HRCDGHHGGFGHJJHGGG2015-09-3025 - 应放在 2015-09-30.zip ABCE2GDX2015-10-05ACCEQ - 应放在 2015-10-05.zip ABCE2GDX2015-10-04ACCEQ - 应放在 2015-10-04.zip

我不应该碰到的剩余文件。

如何实现这一目标?我目前的想法是

  1. dir个内容列入文件
  2. 仅使用*
  3. 从文件名中取出第1行替换日期部分
  4. 在第二个文件中匹配的列表
  5. 删除第一个文件中的匹配行
  6. 按日期压缩,但第二个文件中的前2行除外
  7. 然后转到第一个文件中的第二行,依此类推。
  8. 我在这里遇到的问题是我不知道如何单独用*替换日期,并在文件中搜索。

    请注意PowerShell不是一个选项。我需要使用批处理或VBScript或两者兼而有之。

1 个答案:

答案 0 :(得分:0)

在VBScript中,您可以在文件名上使用正则表达式匹配。

Set fso = CreateObject("Scripting.FileSystemObject")

Set re = New RegExp
re.Pattern = "(\d{4}-\d{2}-\d{2})"

For Each f In fso.GetFolder("C:\some\folder").Files
  For Each m In re.Execute(f.Name)
    zipfile = m.Submatches(0) & ".zip"
    'add file f to zipfile here
  Next
Next