2016-09-15 47 views
0

で複数のバッチファイルを実行します。、私は次のような構造を持つサブフォルダ

E: 
    parent 
    subfolder1 contains mybatch.bat 
    subfolder2 contains mybatch.bat 
    .... 
    subfoldern contains mybatch.bat 

フォルダの数は動的であり、名前が不明で、毎日のフォルダ名は、現在の日付のタイムスタンプが含まれています。

は、私は、各サブフォルダ内からすべての「mybatch.batの」を実行したいのは、mybatch.batのはこれだけ

mkdir temp 

が含まれていましょう。各サブフォルダに移動してmybatch.batを手動で実行すると、すべて正常に動作し、 "temp"という名前のフォルダがサブフォルダに作成されます。

私が望むのは、各フォルダ内のすべてのmybatch.batを実行するバッチファイルです。そのため、各サブフォルダに「temp」フォルダが作成されます。私はこの問題は、私は薄い実行すると、一時フォルダが親フォルダ内に作成され、何もサブフォルダ内に作成されていないということである。この

cd E:\parent 
for /f %%f in ('dir /ad /b') do start %~dp0%%f\mybatch.bat 

を試してみました。 私は助けにコードが正しくコメントに収まらないので、私が唯一の解決策としてこれを掲示しています

おかげ

+0

親切なパスを使ってください! 'dir/ad/b'は現在の作業ディレクトリで(パスが指定されていないので)検索しますが、このバッチファイルの親ディレクトリである'%〜dp0'を使用しています。これらのtweoの場所が同じであれば、すべてが問題ありませんが、違いが出ると奇妙な問題に遭遇します。実際にすべてを実行しない限り、 'start'の代わりに' call'を使うことを考えてください。バッチファイルを同時に... – aschipfl

答えて

2

を感謝しています。このようなものはいかがですか?

EDIT0 @
@echo off 
setlocal enabledelayedexpansion 

set _ROOT="E:\parent" 

for /f "tokens=*" %%f in ('dir /ad /b !_ROOT!') do (
    pushd "!_ROOT:"=!\%%f" 
    call a.bat 
    popd 
) 

  • インナーの.batファイルを実行する際にcallstartを置き換えるには、SPACE Sが含まれているサブディレクトリのサポートを追加しました。
+0

ありがとう、それは働いた。しかし、すべてのmybatch.bat cmdウィンドウは、プロセスの終了後も開いたままです。私は最終的にそれらを閉じるために何を追加すべきですか? – Alaeddin

+0

'start'を削除すると私はうまくいくはずです... – geisterfurz007

+1

' call a.bat'は、あるバッチファイルを別のファイルの後に開始します。それらを並行して実行するには、 'start" "cmd/C a.bat'を使います。しかし、OPが何を望んでいるかわからない... – aschipfl

関連する問題