2012-01-16 14 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 

もちろん、フォルダが既に存在する場合は作成しないでください。これは私がこれまで持っているものです。

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\ディレクトリにSOMEMOVIE.backdropを作成する必要があります。

ルートでそれらをしたい場合は、単にmd "..\%%~nf.backdrop"

(これは、その再帰として映画のディレクトリには、他のサブディレクトリが存在しないと仮定しので、それらが含まれるであろう)

+0

ただし、このスクリプトを実行すると、*さらなる*サブディレクトリが作成されます。つまり、このソリューションは一度しか使用できないため、FOR/Rは適切なオプションではありません。ディレクトリがすでに存在する場合は、エラーメッセージも表示されます。 – dbenham

+0

次に、 '/ d %% d for(" c:\ movies \ * ")do(...')を使用して、もし存在すればフォルダの存在を確認することができます。 nt/if.html –