12

file1.bat が指定されたラベルで file2.bat を呼び出す方法を理解しようとしています。

私はこのようにすることができると考えました:

File1.bat

:config
@echo off
:setvars
set labelmarker=labelmarker
call file2.bat
pause > nul
:EOF

File2.bat

if %labelmarker%==labelmarker goto label4
:label1
echo it won't work...
goto EOF
:label2
echo it must work!
goto EOF
:label3
echo it didn't work...
goto EOF
:label4
echo it works!
goto EOF
:EOF

これは機能します。しかし、file1.bat からバットとラベルを呼び出したいと思います。制御文字やASCIIコードなどで可能ですか? 私が試したように

call file2.bat | goto label4 - doesn't work
call file2.bat > goto label4 - doesn't work
call file2.bat @label4 - doesn't work

どんな助けでも大歓迎です。

特定のラベルとコンテンツを新しいファイルに抽出する必要がある場合でも問題ありません。

4

5 に答える 5

9

行きたいラベルをパラメータとして渡すことができます

スクリプト例

ファーストバット

@echo off
set label=GOHERE
call Second.bat %label%
pause >nul

セカンドバット

@echo off
goto %1
echo This line should be skipped
:GOHERE
echo Jumped here
于 2012-07-20T09:17:40.930 に答える
8

あなたは奇妙なトリックを使うことができます!セカンダリ バッチでラベルを呼び出さずに、セカンダリ バッチでラベルに移動
できます。

ファーストバット

@echo off
call :label
echo returned
exit /b

:label
second.bat
exit /b

セカンドバット

@echo off
echo Main of second.bat
exit /b

:label
echo This is second.bat at LABEL
exit /b

出力

This is second.bat at LABEL
returned

2 番目のバッチがCALLなしで呼び出されたため、ラベルが呼び出される理由も、コントロールがfirst.batに戻る理由もないようです。最初のポイントの原因は、コマンド の内部コードのようです。 2 番目の点は、最初のバッチ ファイルのダミーラベルの前に 1 つの呼び出しがあるため、説明できます。in second.bat は、 7 行目の呼び出しではなく、呼び出し (3 行目) に直接戻ります 。
goto

exit /bfirst.batsecond.bat

編集:奇妙な動作を無効にする方法

コマンドを追加すると、 second.batsecond.batのラベルに暗黙的にジャンプしなくなります。

second.bat & rem出力を OUTPUTに変更します

Main of second.bat
returned
于 2012-07-20T09:42:03.237 に答える