2016-09-19 22 views
0

を呼び出した後、私は小さなバッチテストスクリプトを書いている:間違った順序機能

echo start 
call:errorcheck "test" 
echo main 
goto exit 

:errorcheck 
echo errorcheck: %1 
goto exit 

:exit 
echo end 

出力:

start 
errorcheck: "test" 
end 
main 
end 

私は入力しなくても、機能errorcheck、その後、後藤終了を呼びたいです」主要部分。しかし、スクリプトは "main"セクションに戻ります。どうしましたか?

+5

なぜあなたは 'call'を使用していますか? 'call'の目的は呼び出し側に戻ることです。返すことなくどこかにジャンプするには 'goto'を使います。 'goto'は' call'のようなパラメータを受け付けません。したがって、 'call:errorcheck" test "&got:exit'の代わりに...?ところで、その名前の内部コマンドがあるので、ラベル名として 'exit'を使わないでください。例えば、 'end'や' quit'のように、何か違うものを使う... – aschipfl

答えて

1

サブファンクションでは実行できません。常に返されます。

サブ関数を終了する通常の構文はgoto :eofです。これはスクリプトの最後に(echo endの後に)暗黙的に指定されています。 exit 0でも呼び出しコードに戻ります。

メインコードでcallの後にプログラムを終了して(たとえば、exitまたはgoto :eof)、プログラムを終了する必要があります。

例:

echo start 
call:errorcheck "test" 
if errorlevel 1 exit /b 1 
echo main 
goto exit 

:errorcheck 
echo errorcheck: %1 
if <some error condition> exit 1 
exit 0 

:exit 
echo end 
関連する問題