4

別のバッチ ファイルからバッチ ファイルを呼び出そうとしていますが、2 番目のバッチ ファイルが実行された後、制御を最初のバッチ ファイルに戻して、実行を再開する必要があります。現在、親バッチ ファイルで次のコマンドを使用しています。

call "cmd /c start /b %ROOT_HOME%\folder1\bin\bat1.bat"

%ROOT_HOME% にスペースが含まれていないパスがある限り、これは正常に機能します。

パスにスペースが含まれている場合、上記のコマンドは失敗します。

cmdstartcallのすべての組み合わせを試しましたが、それでも目的の結果を得ることができません。

また、bat1.bat にはexitがなく、変更できません。そのため、 callを単独で使用すると、子バッチ ファイルのみが実行され、親バッチ ファイルには戻りません。

4

3 に答える 3

4

callとにかく新しいバッチを生成しているので、そこにはまったく必要ありませcmdん:

start "" /b "%ROOT_HOME%\folder1\bin\bat1.bat"

環境汚染 (呼び出しの周りで/start /bを使用することで簡単に元に戻すことができます) を心配しない限り、なぜ使用するのだろうかと思いますが、同様に十分なはずです:setlocalendlocalcall

call "%ROOT_HOME%\folder1\bin\bat1.bat"

原則として、何かの周りで解析と実行のレイヤーが増えると、物事が複雑になるだけで、問題が解決することはめったにありません。参照。iexPowerShellでの使いすぎ。

于 2012-11-29T11:50:33.840 に答える
2

短いパスで試してみるとどうですか:

for /f %%P in (%ROOT_HOME%) do set SHORT_ROOT_HOME=%%~sP
call "cmd /c start /b  %SHORT_ROOT_HOME%\folder1\bin\bat1.bat"
于 2012-11-29T11:22:43.497 に答える
1

これと同じくらい簡単なはずです

call cmd /c start /b "" "%ROOT_HOME%\folder1\bin\bat1.bat"
于 2012-11-29T10:32:32.790 に答える