【问题标题】:Zip files according to date in filename根据文件名中的日期压缩文件
【发布时间】:2015-10-12 05:43:18
【问题描述】:

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

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

例如:

第一组:
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. 列表在第二个文件中匹配
  4. 删除第一个文件中的匹配行
  5. 按日期压缩,第二个文件的前 2 行除外
  6. 然后转到第一个文件的第二行,依此类推。

我在这里遇到的问题是我不知道如何将日期单独替换为 * 并在文件中进行搜索。

请注意,PowerShell 不是一个选项。我需要使用批处理或 VBScript 或两者混合来完成。

【问题讨论】:

  • 不是前 2 名,可以是最小年龄的文件夹吗?然后forfilesrobocopy 应该可以解决问题。
  • 如果没有外部正则表达式工具,这里很难找到模式
  • Batch 在我看来是错误的选择(除非您也可以使用第三方工具);是唯一支持某种正则表达式的findstr,但这有几个问题并且记录不充分......

标签: windows batch-file vbscript


【解决方案1】:

在 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

【讨论】:

  • 这也适用于文件夹吗?我的意思是,如果一个文件夹包含我想要的日期,每行的每一行也会选择该文件夹并添加到 zip 中吗?
  • 上面的示例代码处理文件。如果要处理文件夹,则需要将 .Files 替换为 .SubFolders
  • 但是上面的代码没有考虑压缩除前2个之外的每个组中的所有文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2016-04-20
  • 2012-01-21
  • 2022-01-20
  • 2019-11-24
相关资源
最近更新 更多