2010-12-07 8 views
7

現在、一連のフォルダに対して繰り返し実行する.cmd Windowsシェルスクリプトを作成しようとしています。しかしでも、次の最も簡単なスクリプト:Windowsシェルで一連のフォルダを反復処理するにはどうすればよいですか?

echo "%ROOT%" 
for %%f in ("%ROOT%\Binaries\") do (
    echo "%%f" 
    if not exist "%%f\Subfolder" 
     md "%%f\Subfolder" 
) 

出力:

CurrentDir>echo "<ActualPathToRoot>" 
"<ActualPathToRoot>" 
%f\Subfolder was unexpected at this time 
CurrentDir>if exists "%f\Subfolder" 

私が間違って何をしているのですか?そのスクリプトを変更してその1つのフォルダを反復するにはどうしたら、 "Subfolder"という名前のサブフォルダがないことがわかると、そのサブフォルダが作成されますか?また、そのようなスクリプトを書く上で良いチュートリアルですか?

答えて

4

これは私のために動作します:あなたは別のforパラメータを使用する必要があります(サブ)フォルダの反復のため

echo %ROOT% 
for /D %%f in (%ROOT%\Binaries\*) do echo %%f && if not exist %%f\Subfolder md %%f\Subfolder 
+0

すべては1行にする必要がありますか? – sharptooth

+0

はい。少なくとも私のバージョンでは、このように働いていました。たぶん複数の行でこれを行う方法があるかもしれませんが、古典的なバッチファイルはそのように機能しました。そして、通常、人々は 'goto'を使って多くの行を作るでしょう。 – detunized

+0

ありがとうございました。問題は、改行が重要であるとは思わなかったからです。 – sharptooth

8

ですから、Cのすべてのディレクトリリストにしたい場合:あなたはこれを行う必要があります。

for /d %%A in (C:\*) do echo %%A 

注ディレクトリを示すパラメータ/d。サブディレクトリに移動するには、あなたはJPGのみを探しているすべてのWindowsサブディレクトリを通じてこれでしょう反復処理/r

for /r C:\Windows %%A in (*.jpg) do echo %%A 

とのために再帰を行う必要があります。あなたができることを低速で見てください/d /rthis reference suggests - 私は単純にできませんが、多分あなたはこれを行うことができますか?

私はすぐに書き留め問題を回避するには、単にforループ内のすべてのディレクトリのdirを行うことです:dirは、印刷、ディレクトリの再帰的なリストを実行する/ad/s/bと組み合わせて使用​​されていることを

for /f "delims=" %%A in ('dir /ad/s/b') do echo %%A 

注意見つかったディレクトリの名前。
これらのツールを手元に置くと、if-subfolder構造を実行できるはずです。必要があるかもしれないことに注意してください。

関連する問題