batch file不能压缩“终止作业”

我试图打开第二batch file,并检测它是否正常退出或由用户closures(CTRL + C或X或窗口termiate等),所以我使用下面的例子通过批处理脚本时closures

@Echo off set errorlevel=1 start /w %comspec% /c "mode 70,10&title Folder Confirmation Box&color 1e&echo.&echo. Else the close window&pause>NUL&exit 12345" echo %errorlevel% pause 

我试图保持第一批等待(/ W),因为我会稍后检查errorlevel但closures第二batch file后,我得到一个错误,如^ cterminate批处理作业(是/否)?

我通过https://superuser.com/questions/35698/how-to-supress-terminate-batch-job-yn-confirmation

与脚本

 rem Bypass "Terminate Batch Job" prompt. if "%~2"=="-FIXED_CTRL_C" ( REM Remove the -FIXED_CTRL_C parameter SHIFT ) ELSE ( REM Run the batch with <NUL and -FIXED_CTRL_C CALL <NUL %1 -FIXED_CTRL_C %* GOTO :EOF ) 

这工作得很好所以有一种从同一batch file,避免终止的方式? 或者我必须从同一批次创build一个新的批次并调用它? (我不想让他们看到这个文件)

Solutions Collecting From Web of "batch file不能压缩“终止作业”"

这适用于我:

 call :runme start /w "Child Process" %comspec% /c "child.bat & exit 12345" <NUL >NUL 2>NUL echo %ERRORLEVEL% goto :eof :runme %* goto :eof 

这个想法是调用当前脚本中的子程序,而不是调用外部脚本。 您仍然可以重定向输入和输出的子程序调用。

  1. 不要使用set命令将值分配给像errorlevel这样的volatile变量 。 这样做会导致它在当前的情况下变得非常不稳定。
  2. 总是在START "title" [/D path] [options] "command" [parameters] 使用标题
  3. start "" /W cmd /c "anycommand&exit /B 12345" 总是返回12345退出代码。 这是因为所有具有&连续命令的cmd行都是在解析时间(与括在圆括号中的命令块相同)中准备的,然后完全不可分割地运行。 省略&exit /B 12345anycommand获得正确的退出代码,或者用类似于start "" /W cmd /c "anycommand&&exit /B 12345||exit /B 54321"东西代替它,以仅获得成功/失败指示。

下一个代码片段可以帮助:

 @ECHO OFF SETLOCAL enableextensions set "_command=2nd_batch_file.bat" :: for debugging purposes set "_command=TIMEOUT /T 10 /NOBREAK" :: raise errorlevel 9009 as a valid file name can't contain a vertical line invalid^|command>nul 2>&1 echo before %errorlevel% start "" /w %comspec% /C "mode 70,10&title Folder Confirmation Box&color 1e&echo(&echo( Else the close window&%_command%" echo after %errorlevel% 

输出显示示例%_command%退出代码: 01如果正确结束,而-1073741510如果通过Ctrl + CCtrl + Break强制终止或红色×

 ==>D:\bat\SO\31866091.bat<nul before 9009 after 0 ==>D:\bat\SO\31866091.bat<nul before 9009 after 1 ==>D:\bat\SO\31866091.bat<nul before 9009 ^CTerminate batch job (Y/N)? after -1073741510 ==>