3
次のバッチファイルを実行すると、プログラムがfuncルーチンから復帰し、 'プログラムの終了'メッセージが表示されます。代わりに、forループでpauseコマンドが実行された後にキーを押すと、プログラムがハングしているように見えます。 exit/bをgoto:eofと置き換えても同じ効果があるようです。ルーチン内で無限ループから戻ることができません
@echo off
echo start program
call :func
echo end program
pause
exit /b
:func
echo start func
for /l %%l in() do (
echo start loop
pause
exit /b
echo end loop
)
echo end func
exit /b
予想される出力:
start program
start func
start loop
Press any key to continue...
end program
Press any key to continue...
私は無限ループとしてのgotoラベルを使用しないようにしたいと思います。次のループでは、反復メッセージは一度だけ表示されます。
:test
for /l %%l in (1,1,3) do (
echo iteration: %%l
exit /b
)
exit /b
を何がルーチン内で無限ループを使用して、まだ、呼び出し元に戻ることができるようにする適切な方法でしょうか?
あなたはこのフレーズを読んでもリンクされDosTipsトピックに返信#7で
私はそれに続くのかどうかわかりません。 – Compo
@Compo: 'exit/b'はループを終了すると仮定されていますが、'/L'ループでは動作しないようです。 – abelenky
考えられるのは、特定の条件が満たされているときにforループ内の関数呼び出しから戻ることです会ったバッチファイルスクリプティングでは、本体内からのforループの状態に影響を与えることはできません。私は、goto-labelの使用を避けながら、無限ループから抜け出すための直接的な方法がないことも発見しました。詳細については、次のDosTipsのトピックを参照してください。http://www.dostips.com/forum/viewtopic.php?f=3&t=2707 – treintje