別のバッチから特定の goto 関数で薄いバッチを開始できるかどうかを知りたいですか?
したがって、別のバッチファイルを開始するだけでなく、「子」バッチで特定の goto オプションを「親」バッチに選択させることもできますか?
別のバッチから特定の goto 関数で薄いバッチを開始できるかどうかを知りたいですか?
したがって、別のバッチファイルを開始するだけでなく、「子」バッチで特定の goto オプションを「親」バッチに選択させることもできますか?
親/マザー バッチ ファイルを用意し、パラメーターを子バッチ ファイルに渡すだけです。
お母さんバット
@ECHO OFF
ECHO Here we go
CALL child.bat 3
PAUSE
child.bat
@ECHO OFF
IF "%1"=="1" Goto 1
IF "%1"=="2" Goto 2
IF "%1"=="3" Goto 3
EXIT
:1
ECHO 1!
PAUSE
EXIT
:2
ECHO 2!
PAUSE
EXIT
:3
ECHO 3!
PAUSE
EXIT
この例は3!をエコーするはずです。これは、親バッチ ファイルがパラメーター3を子バッチ ファイルに渡すためです。
はい、しかしそれはハックです。
通常は、呼び出されたバッチ ファイルの助けを借りてこれを行います。
main.bat
call second.bat :theFunction
* 2 番目のバット
goto %1
...
:theFunction
ハックは機能バグを使用します。second.bat と同じラベルのみが必要です。また、second.bat を起動しない場合にのみ機能します。call
main.bat
call :theFunction
echo back in main
exit /b
:theFunction
second.bat
echo back in the func in main, this line will never reached
exit /b This line will also never reached
second.bat が戻ると、main.bat の次の行に戻りますcall
。
1.bat
call 2.bat /c goto :this
call 2.bat /c call :that
.
2.bat
if "%1"=="/c" shift & shift & %2 %3
goto :eof
:this
echo This!
goto :eof
:that
echo That!
goto :eof
編集:私の元の投稿は最も正しいものでした。しかし、私は自分の間違いを修正しました。
ダブルシフトして %1 と %2 を左に移動し、渡された他の変数を %1 と %2 の位置に移動します。次に %2 と %3 を実行します。これは、行の実行/解釈が完了するまでシフトの効果が有効にならないためです。
呼び出しているバッチファイルで、これを一番上に置きます
if not %1=="" goto :%1
あなたがそれを呼び出すために使用しているバッチファイルで
call b.bat labelname
明らかに、これは何をしようとしているのかによって制限されますが、基本的な機能は機能します。