2012-01-16 118 views
0

我有很多電影在不同的流派文件夾。我想通過批處理文件執行的操作是爲電影所在的同一流派文件夾中的每個電影創建一個文件夾。例如:基於批處理的文件/文件夾創建

/Movies/SciFi/ 
/Movies/SciFi/the matrix.avi 
/Movies/SciFi/the matrix reloaded.mkv 
/Movies/Comedy/ 
/Movies/Comedy/borat.avi 
/Movies/Comedy/dinner for schmucks.avi 

基本上我想運行從父文件夾電影的批處理文件,掃描所有的流派文件夾* .MKV * .AVI * .mp4文件,並創建一個基於電影名稱的文件夾。文件夾的名稱應爲:

.(moviename without extension).backdrop 

Ofcourse如果文件夾已存在,則不應創建文件夾。這是我到目前爲止有:

for /f %%f in ('dir *.avi *.mkv *.mp4 /b') do md .%%~nf.backdrop 

這有一些缺點,但我必須從每個流派文件夾中運行它,如果文件名中有一個空格,該命令將只趕上了一切直到空間,渲染aboce命令幾乎沒用。

希望你們能幫助我。

回答

1

無需如果/ r選項不想走分層結構。此外,一個簡單的if語句可避免試圖創建一個已經存在的文件夾

for /D %%D in (\Movies\*) do for %%F in ("%%~D\*.avi" "%%~D\*.mkv" "%%~D\*.mp4") do (
    if not exist "%%~D\%%~nF.backdrop" md "%%~D\%%~nF.backdrop" 
) 
1

行情將處理的空間;

@echo off 
for /r "c:\movies\" %%d in (.) do (
    pushd %%d 
    echo now in %%d 
    for %%f in (*.avi *.mkv *.mp4) do (
     md "%%~nf.backdrop" 
    ) 
    popd 
) 

這應該創建一個在Category\SOMEMOVE\ DIR SOMEMOVIE.backdrop

如果你希望他們在根剛剛md "..\%%~nf.backdrop"

(假設有在電影目錄作爲其遞歸沒有其他子目錄因此將包括他們)

+0

但*會*有額外的子目錄,一旦該腳本已運行。這意味着這個解決方案只能使用一次,所以FOR/R不是一個好選擇。如果目錄已經存在,也會給出錯誤信息。 – dbenham 2012-01-16 13:48:40

+0

然後,您可以在(「c:\ movies \ *」)中使用'for/d %% d(do ... ...),而您可以使用'if exists'檢查文件夾是否存在http://ss64.com/ NT/if.html – 2012-01-16 13:54:09

相關問題