朝に実行する「セットアップ」スクリプトがあり、必要なすべてのプログラムを起動します。これらのいくつかは環境の追加セットアップが必要なので、それらを小さなBATスクリプトでラップする必要があります。
このようなスクリプトをWindows XPバックグラウンドで実行するにはどうすればよいですか?
CALL env-script.bat
は同期的に実行します。つまり、セットアップスクリプトはenv-scriptのコマンドが終了した後にのみ続行できます。
START/B env-script.bat
は同じコマンドプロンプトでCMD.exeの別のインスタンスを実行し、非常に乱雑な状態のままにします(ネストされたCMD.exeの出力が表示され、キーボードがしばらく停止し、スクリプトは実行されません)。
START/B CMD env-script.bat
は同じ結果をもたらします。 CMDのフラグはどれも私の法案と一致しないようです。
実際、以下は私にとってはうまく機能し、新しいウィンドウを作成します。
test.cmd:
@echo off
call "cmd /c start test2.cmd"
call "cmd /c start test3.cmd"
echo Foo
pause
test2.cmd
@echo off
echo Test 2
pause
exit
test3.cmd
@echo off
echo Test 3
pause
exit
新しいウィンドウを前面に表示したくない場合は、Mosheが指摘したように、/min
などのstart
へのパラメーターと組み合わせてください。
2歳ですが、完全を期すために...
標準のインラインアプローチ:(つまり、Linuxで&
を使用した場合の動作)
START /B CMD /C CALL "foo.bat" [args [...]]
注:1. CALL
は通常.batファイルとペアになっています。これは、..(つまり、これは非同期にするためのCMD /C CALL "foo.bat"
フォームの単なる拡張です。通常、正しくする必要があります。終了コードを取得しますが、ここでは問題ではありません。); 2. .batファイルを二重引用符で囲む必要があるのは、名前にスペースが含まれている場合のみです。 (名前はパスである可能性があり、その場合はその可能性が高くなります。).
出力が必要ない場合:
START /B CMD /C CALL "foo.bat" [args [...]] >NUL 2>&1
バットを独立したコンソールで実行したい場合:(つまり、別のウィンドウ)
START CMD /C CALL "foo.bat" [args [...]]
他のウィンドウを後でぶらぶらさせたい場合:
START CMD /K CALL "foo.bat" [args [...]]
注:通常、開いているウィンドウを通常のコンソールとして使用したいユーザーがいない限り、これは実際には貧弱なフォームです。出力を表示するためにウィンドウを固定したい場合は、batファイルの最後にPAUSE
を追加することをお勧めします。または、まだ、コマンドラインの後に^& PAUSE
を追加します。
START CMD /C CALL "foo.bat" [args [...]] ^& PAUSE
STARTは、CMDスクリプトからバックグラウンドで何かを実行する唯一の方法であるため、引き続き使用することをお勧めします。/B修飾子の代わりに、/ MINを試して、新しく作成されたウィンドウが気にならないようにします。また、/ LOWまたは/ BELOWNORMALを使用して優先度を低く設定することもできます。これにより、システムの応答性が向上します。
前景/背景用語以外。実行中のウィンドウを非表示にする別の方法は、システムでまだ使用可能な場合、vbscriptを使用することです。
DIM objShell
set objShell=wscript.createObject("wscript.Shell")
iReturn=objShell.Run("yourcommand.exe", 0, TRUE)
sth.vbsという名前を付けて、batから呼び出し、スケジュールされたタスクなどに入れます。
これは私のWindows XP Homeインストール、Unixの方法で動作します:
call notepad.exe &
新しいC#Windowsアプリケーションを作成し、mainからこのメソッドを呼び出します。
public static void RunBatchFile(string filename)
{
Process process = new Process();
process.StartInfo.FileName = filename;
// suppress output (command window still gets created)
process.StartInfo.Arguments = "> NULL";
process.Start();
process.WaitForExit();
}
最後にこのオプションを使用すると、実際には非常に簡単です。
c:\ start BATCH.bat -WindowStyle Hidden