2012-05-14 57 views
0

我正在尋找一種方式來壓縮基於他們上次更改日期的時間跨度文件夾和事後除去它們DOS批處理文件基礎上的時間跨度來壓縮文件夾

的結構如下

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個月的所有文件夾 (例如,上次修改時間是二月,當前時間可能)。一個importand的一點是,我想用1日至上個月的,而不是-90天
  2. 然後用ZIP所有子文件夾和文件選定的文件夾包含到一個february2012.zip
  3. 刪除的(現在的)原件壓縮文件

到目前爲止,我的最好主意是使用forfiles.exe(它只接受一個日期),使用生成日期(3個月前的第一天並使用比修飾符舊)並創建resultextfile。然後使用resultfile作爲進口的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 

這似乎工作 - 但只是非常緩慢(我想原因是映射的驅動器 - > 3H爲150MB)

+0

你的策略聽起來對我來說是正確的,你的問題是什麼? –

+0

它似乎不是「最好的」選項 - 我想知道是否有一個「更乾淨」的方式來達到目標​​ –

回答

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

+0

我現在使用 - > FORFILES/PH:\ Temp \ 2zip/MO */D -31.4.2012/C「cmd/c C:\ Program Files(x86)\ 7-Zip \ 7z.exe a -t7z H:\ temp \ x2.zip @path」< - 但它非常慢(猜測自從我使用映射驅動器 - 3小時爲150MB) –

+0

我使用的日期現在是上個月的上個月。因爲我每個月都會運行這個命令,所以應該沒有比前一個月更老的東西,因爲它應該已經被壓縮和刪除了 –

相關問題