2015-10-12 99 views
0

我在Windows批處理文件中有以下要求。我搜索了很多,但找不到符合我要求的明確答案。根據文件名中的日期的壓縮文件

我需要根據日期壓縮一些文件/文件夾(文件/文件夾名稱將包含此日期)。日期格式爲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. 採取1號線從文件名與第二個文件匹配*
  3. 列表單獨更換日期部分
  4. 刪除在第一檔
  5. 匹配的行
  6. 根據日期壓縮,除了從第二個文件開始的第2行
  7. 然後轉到第一個文件的第二行等等。

我在這裏遇到的問題是我不知道如何用*替換日期,並在文件中進行搜索。

請注意PowerShell不是一個選項。我需要使用批處理或VBScript或兩者兼而有之。

+0

而不是頂部2,可能是最小年齡的文件夾?那麼'forfiles'或'robocopy'應該能夠做到這一點。 – Paul

+0

很難找到一個模式,沒有外部正則表達式工具 – Paul

+0

*在我看來,批處理*是錯誤的選擇(除非你也可以使用第三方工具);只是支持某種正則表達式的'findstr',但是這有幾個問題,並且文檔記錄很糟糕...... – aschipfl

回答

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 
+0

這個文件夾還能工作嗎?我的意思是如果一個文件夾包含我想要的日期,那麼每一行都會選擇該文件夾並添加到zip中? – user2806971

+0

上面的示例代碼處理文件。如果你想處理文件夾,你需要用'.SubFolders'替換'.Files'。 –

+0

但上面的代碼沒有考慮壓縮每個組中除頂部2以外的所有文件。 – user2806971

相關問題