2017-04-16 85 views
1

我試圖對付看起來像這樣的一個文件夾中的所有文件:Windows批處理〜如何根據文件日期將文件移動到新文件夾

IMG_20161216_202848.jpg

IMG_20161216_203848.jpg

IMG_20161101_102848.jpg

IMG_20161102_112848.jpg

被移動到這樣的文件結構:

2016年12月

- IMG_20161216_202848.jpg

- IMG_20161216_203848.jpg

2016年11月

- IMG_20161101_102848.jpg

- IMG_20161102_112848 .jpg

正如您所見,有一個包含月份 - 年份名稱和文件的子內容的頂級文件夾。我希望從文件的上次修改日期獲取頂級文件夾的月份和年份。這些文件需要遞歸提取,然後全部放入上面的結構中;沒有更多的遞歸。不會有任何文件名重複,如果只是覆蓋它。

什麼是Windows批處理腳本命令來實現上述目的?

爲了記錄我打開一個Windows應用程序,也可以做到這一點 - 我設置了幾個參數,它爲所有的文件去了。

感謝。

回答

0
@ECHO Off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
FOR /f "tokens=1-3delims=_" %%a IN (
'dir /b /a-d "%sourcedir%\IMG_*_*.jpg" ' 
) DO IF "%%c" neq "" (
    SET /a dmonth="(%%b/100) %% 100" 
    SET /a dyear=%%b/10000 
    FOR %%m IN (January February March April May June 
    July August September October November December) DO SET /a dmonth-=1&IF !dmonth!==0 (
    ECHO MD "%destdir%\%%m !dyear!" 2>nul 
    ECHO MOVE "%sourcedir%\%%a_%%b_%%c" "%destdir%\%%m !dyear!\" 
) 
) 

GOTO :EOF 

你需要改變的sourcedirdestdir設置以適合你的情況。

所需的MOVE命令僅爲ECHO用於測試目的。 驗證命令是否正確後,將ECHO MOVE更改爲MOVE以實際移動文件。添加>nul以抑制報告消息(例如,1 file moved

爲了測試目的,所需的MD命令僅僅是ECHO驗證命令是否正確後,將ECHO(MD更改爲MD以實際創建目錄。如圖所示,取消錯誤消息追加2>nul(例如,當該目錄已經存在)

此過程假定符合IMG_*_*.jpg文件匹配,所有的文件名是嚴格IMG_ 8numerics _ 任何 .JPG。

_上讀取每個源文件名和tokenise。將%%b中的第二個標記除以100,並計算給出月份的模式100。將%%b中的日期除以10000年。對於每個月份名稱,遞減dmonth,如果dmonth變爲零,則%%m將包含月份名稱作爲文本,因此使目錄忽略錯誤消息並移動文件。


爲了適應子目錄掃描和其他文件掩碼(請注意,這種看似微小的變化可能需要一個完全不同的方法)

@ECHO Off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
FOR /f "tokens=1-3delims=_" %%a IN (
'dir /b /s /a-d "%sourcedir%\IMG_*_*.jpg" "%sourcedir%\VID_*_*.mp4" ' 
) DO IF "%%c" neq "" (
    SET /a dmonth="(%%b/100) %% 100" 
    SET /a dyear=%%b/10000 
    FOR %%m IN (January February March April May June 
    July August September October November December) DO SET /a dmonth-=1&IF !dmonth!==0 (
    ECHO MD "%destdir%\%%m !dyear!" 2>nul 
    ECHO MOVE "%%a_%%b_%%c" "%destdir%\%%m !dyear!\" 
) 
) 

GOTO :EOF 

[未經測試]

+0

優秀的東西!另一件事,你可以讓它處理子目錄和VID _ * _ * .mp4(與IMG格式相同,但以VID開頭並以mp4結尾)。與此同時,我將會審查所有深奧命令的文檔。 –

+0

謝謝。好東西!會問如何基於上次修改日期而不是使用文件名來實現上述內容,但這足以滿足我的需求。我會使用你提供的,並從那裏學習。謝謝! –

0

正如你已經明確允許一建議使用Windows工具來完成這項任務我推薦Naru的程序'FlexibleRenamer'(http://hp.vector.co.jp/authors/VA014830/english/FlexRena/)。

重命名文件並移動它基本上是相同的操作,您可以使用此程序找到例如文件夾樹中的所有圖像文件,請使用它們的文件名的部分或其上次訪問日期來構建新的子文件夾,然後將它們移動到該文件夾​​中。對於其他文件,如* .mp3,它甚至可以讀取和使用MP3標籤。

相關問題