1

呼び出されたループでバッチ ファイルを完全に停止するにはどうすればよいですか?

exit /bバッチ ファイル全体ではなく、単に :label ループを終了するだけですが、bareはバッチ ファイル親の CMD シェルを終了しますが、これは望ましくありませんexit

@echo off
call :check_ntauth

REM if check fails, the next lines should not execute
echo. ...About to "rmdir /q/s %temp%\*"
goto :eof

:check_ntauth
  if not `whoami` == "nt authority\system" goto :not_sys_account
  goto :eof

:not_sys_account
  echo. &echo. Error: must be run as "nt authority\system" user. &echo.
  exit /b
  echo. As desired, this line is never executed.

結果:

d:\temp>whoami
mydomain\matt

d:\temp>break-loop-test.bat

 Error: must be run as "nt authority\system" user.

 ...About to "rmdir /q/s d:\temp\systmp\*"     <--- shouldn't be seen!
4

2 に答える 2

1

構文エラーで停止できます。

:not_sys_account
    echo Error: ....
    call :HALT

:HALT
call :__halt 2>nul
:__halt
()

HALT 関数はバッチ ファイルを停止します。それ自体が 2 番目の関数を使用するため、nul にリダイレクトすることで構文エラーの出力を抑制できます。

于 2013-10-08T20:47:48.557 に答える
1

ERRORLEVELサブルーチンから設定し:not_sys_account、戻り値として使用できます。メイン プロシージャはこれを確認し、その動作を変更できます。

@echo off
call :check_ntauth

REM if check fails, the next lines should not execute
if errorlevel 1 goto :eof
echo. ...About to "rmdir /q/s %temp%\*"
goto :eof

:check_ntauth
  if not `whoami` == "nt authority\system" goto :not_sys_account
  goto :eof

:not_sys_account
  echo. &echo. Error: must be run as "nt authority\system" user. &echo.
  exit /b 1
  echo. As desired, this line is never executed.

元のコードとの違いは、 がexit /b 1指定されていることと、 が設定されている場合ERRORLEVEL、チェックif errorlevel 1 goto :eofによってスクリプトが終了することERRORLEVELです。

于 2013-10-08T20:50:52.577 に答える