Windows cmdスクリプトから複数のコマンドを実行する


136

複数のタスクを連続して実行するWindows cmdスクリプトを記述しようとしています。ただし、スクリプトの最初のコマンドの後で常に停止します。

後に停止するコマンドは、Mavenビルドです(これが適切かどうかはわかりません)。

どのようにしてそれを継続させ、各タスクを順番に実行させますか?

ソフトウェアのインストールやレジストリの設定などは完全に問題外です-それは私が恐れている一般的なWindows XPインストールで動作する必要があります。

理想的には、コマンドのいずれかが失敗した場合にスクリプトを中止したいのですが、これは「必要な機能」であり、必須ではありません。

ありがとう。

回答:


139

別の.batファイルを呼び出すときは、呼び出しの前に「call」が必要だと思います。

call otherCommand.bat

1
こんにちは。元のスクリプトでは、他の.cmdファイルを呼び出すことはしませんでしたが、それを個別のファイルに分割して、それぞれを順番に実行できるようにしました。したがって、各コマンドの前に呼び出しを置くことで、トリックがうまくいったようです、ありがとう!
ダレングリーブズ

5
実際のところ、Windows上で、mvnこのようにあなたが使用する必要があり、それ自体で.batファイルでcallのようにそれのためにcall mvn install。通常、追加のcmdファイルを作成する必要はありません。
jfpoilpret 2012

2
バッチファイルにセミコロンは必要ないことに注意してください。また、callを使用する必要がある理由は、mvn自体がバッチファイルであり、バッチファイルはcallで相互に呼び出す必要があるためです。それ以外の場合、制御は呼び出し元に戻りません。
プシュカル2014

@Gulzar Nazim-if-elseステートメントを使用してすべてのコマンドを1つのバッチファイルに入れて、別のバッチファイルで維持したくないのかどうか知っていますか?
Ng2-Fun 2016

1
私はnpmアップデートとprotractorテストで同様のことをしようとしていました。私は私が実現するまで私には適用され、この答えを考えていなかったnpmprotractorされている.cmdWindows上のファイル。
joshden 2017

45

コマンド間で&&記号を使用すると、最初のコマンドが成功した場合にのみ、2番目のコマンドを実行できます。詳細はこちらhttp://commandwindows.com/command1.htm


おかげで、上記の受け入れられた回答と組み合わせて試してみます。
ダレングリーブズ

Mavenビルドが失敗した場合、2番目のスクリプトの実行が停止しますか?
Varun Achar 2013年

そのリンクは壊れています:「バックエンドサーバーは時間内に応答しませんでした。アプリサーバーはビジー状態であり、時間内にリクエストを処理できません。」
kevinji 2013

1
@TheM Windowsは、GUIベースのアプリケーションとコマンドベースのアプリケーションを区別します(EXEファイルの先頭近くにフラグがあります)。GUIベースのアプリケーションをコマンドラインから起動すると、コマンドラインから完全に切り離されているため、常にすぐに終了するように見えます。GUIプログラム(エクスプローラーなど)からコマンドベースのプログラムを起動すると、常に新しいコマンドラインが表示されます。POSIXシステムはそのような区別をしないため、動作はより一貫しています。
coderforlife 2014

2
@TheMこれを回避するために使用できますstart /B /WAIT calc
coderforlife

25

最初のコマンドが停止する理由がわかりません。あなたがそれを平行にすることができるなら、あなたは次のようなことを試すことができます

start cmd.exe /C 1.bat      
start cmd.exe /C 2.bat

7
コマンドの実行後もシェルを開いたままにする場合/K/C、代わりに使用します。
JellicleCat 2011

使用する必要はありませんcmd.exestart、ちょうどstart x.bat1行います。
user66001 2013

23

Mavenテストスクリプトを実行するためのバッチスクリプトを作成するというまったく同じタスクを実行しています。問題は、mvn clean installでmaven scripsを呼び出すこと自体がスクリプトであるため、call mvn clean installで行う必要があることです。

機能するコード

rem run a maven clean install
cd C:\rbe-ui-test-suite 
call mvn clean install
rem now run through all the test scripts
call mvn clean install -Prun-integration-tests -Dpattern=tc-login
call mvn clean install -Prun-integration-tests -Dpattern=login-1

むしろ呼び出しの使用に注意してください。これにより、バッチファイルで連続したmavenスクリプトを使用できるようになります。


5

2つのアンパサンドを使用すると、最初のコマンドが成功した場合にのみ、2番目のコマンドが実行されます。

cd Desktop/project-directory && atom .

一方、アンパサンドを1つだけ使用すると、最初のアンパサンドが失敗した場合でも、両方のコマンドを実行しようとします。

cd Desktop/project-directory & atom .

1

Windowsで実行している場合は、次のコマンドを使用できます。

ドライブ:

cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit

1

あなたの質問に対する直接の答えはわかりませんが、これらのスクリプトをたくさん行う場合は、perlのようなより強力な言語を学ぶ価値があります。Windowsには無料の実装が存在します(たとえば、activestate、cygwin)。私は自分のタスクのための最初の努力の価値があることを発見しました。

編集:

@Ferruccioで提案されているように、追加のソフトウェアをインストールできない場合は、vbscriptやjavascriptを検討してください。これらは、Windowsスクリプトホストに組み込まれています。


ありがとうございます。ソフトウェアをインストールできません。くだらないWindowsスクリプト言語よりも強力なものにアクセスできたらいいのにと思います。:-(
ダレン・グリーブス

6
常にvbscriptまたはjavascriptを使用できます。これらは、Windowsスクリプトホストに組み込まれています。
Ferruccio

0

バッチファイルにセミコロンは必要ないことに注意してください。また、callを使用する必要がある理由は、mvn自体がバッチファイルであり、バッチファイルはcallで相互に呼び出す必要があるためです。それ以外の場合、制御は呼び出し元に戻りません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.