• ベストアンサー

.vbsで複数のbatファイルを実行する場合

.vbsでbatファイルを実行しようとしているのですが、1つのbatファイル(練習1.bat)であれば以下のようになるかと思います。 --------------------------------------------------- Option Explicit Dim x Set x = CreateObject("WScript.Shell") x.Run "C:\Users\Desktop\練習\練習1.bat" --------------------------------------------------- ただ、2つ以上のbatファイル(練習1.bat、練習2.bat)を実行したい場合の処理が分かりません。 ちなみに、単純ですが以下のように作ってもダメでした、、 --------------------------------------------------- Option Explicit Dim x, y Set x = CreateObject("WScript.Shell") Set y = CreateObject("WScript.Shell") x.Run "C:\Users\Desktop\練習\練習1.bat" y.Run "C:\Users\Desktop\練習\練習2.bat " --------------------------------------------------- ネットでググってもよく分からずこちらで質問させて頂きました。 お手数おかけしますが、ご教授頂けますと幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • luka3
  • ベストアンサー率72% (424/583)
回答No.2

>ちなみに、片方を別のフォルダ先を指定すると上手く行かなくなりますか? >(今回は練習フォルダに作っていますが、練習2.batを練習フォルダ内の >さらにsampleフォルダに作って実行すると上手く反映されませんでした、、) VBSからはどこにあるBATでも実行できます。 ただし、カレントディレクトリを意識する必要があります。 「今いるディレクトリ」です。 VBSから呼び出す場合、VBSのファイルを置いてあるフォルダがカレントディレクトリになるはずです。 VBSも「C:\Users\Desktop\練習」に置いてあれば、特段問題は出ないでしょう。 この状態で C:\Users\Desktop\練習\sample\練習2.bat を呼び出すと、カレントディレクトリは C:\Users\Desktop\練習 のままなので、練習2.bat は sampleのフォルダにあるファイルを見つけられないことになります。 少しわかりにくいですかね。 練習2.bat の1行目に CD & PAUSE を追加してみてください。 現在のカレントディレクトリが表示されて一時停止します。 対処方法ですが、1つ目はVBS側でカレントディレクトリを変更する方法 x.CurrentDirectory = "C:\Users\Desktop\練習" x.Run "練習1.bat" ' カレントディレクトリにあればフルパスでなくてもいい x.CurrentDirectory = "sample" ' 相対パスで書いてもいい x.Run "練習2.bat" ' もしこの後も何か実行するなら元に戻しておくか、別のフォルダに移動する x.CurrentDirectory = ".." ' 1つ上に戻る 2つ目はBATの方で制御する方法 練習2.bat の最初に追加 PUSHD "%~dp0" 呪文のようですが、これで自分自身が置かれてあるフォルダに移動します。 意味としては CD /D "C:\Users\Desktop\練習\sample" と同じになります。

Lifeislikehell4
質問者

お礼

ご回答ありがとうございます! 丁寧な内容でとても助かりますm(_ _)m 素人なもので初見では理解が出来ず、実際に色々試して理解しました。今回頂いた内容参考にさせて頂き、どうするかは今後検討します。 また、不明点出たらご教授頂けますと幸いです。 ありがとうございました!

その他の回答 (2)

  • kteds
  • ベストアンサー率42% (1882/4440)
回答No.3

下記ではどうでしょうか Dim x As Object Set x = CreateObject("WScript.Shell") x.Run "C:\Users\Desktop\練習\練習1.bat",1,True x.Run "C:\Users\Desktop\練習\練習2.bat",1,True

Lifeislikehell4
質問者

お礼

ご回答ありがとうございます! 参考にさせて頂きますm(_ _)m

Powered by GRATICA
  • luka3
  • ベストアンサー率72% (424/583)
回答No.1

別個にShellオブジェクトを作成する必要はありません。 単に連続して呼び出せばよいです。 Set x = CreateObject("WScript.Shell") x.Run "C:\Users\Desktop\練習\練習1.bat" x.Run "C:\Users\Desktop\練習\練習2.bat" ちなみにこれだと、練習1.bat の終了を待たずに 練習2.bat が実行されます。 それぞれ、終了を待って順番に実行するには、 x.Run "C:\Users\Desktop\練習\練習1.bat", , True x.Run "C:\Users\Desktop\練習\練習2.bat", , True とします(第3引数で終了を待つかどうかを指定)。

Lifeislikehell4
質問者

お礼

ご回答ありがとうございます! 丁寧な回答大変助かります。 連続して呼び出せるんですね! ちなみに、片方を別のフォルダ先を指定すると上手く行かなくなりますか? (今回は練習フォルダに作っていますが、練習2.batを練習フォルダ内のさらにsampleフォルダに作って実行すると上手く反映されませんでした、、)

関連するQ&A