我正在尝试打开第二个批处理文件并检测它是否正常退出或由用户关闭(ctrl+c 或 x 或窗口终止等..) 所以我使用 Batch run script when closed 的以下示例
@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),因为我稍后会检查错误级别 但是关闭第二个批处理文件后,我收到类似 ^cterminate批处理作业(Y/N)? 的错误?
我尝试了 https://superuser.com/questions/35698/how-to-supress-terminate-batch-job-y-n-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
)
效果很好 那么有没有一种方法可以从同一个批处理文件开始并避免终止? 或者我是否必须从同一批处理创建一个新批处理并调用它? (我不希望他们也看到该文件)
最佳答案
- 不要将值分配给 volatile environment variable就像使用
set
命令的errorlevel
一样。这样做会导致它在当前上下文中变得不稳定。 - Always use title在
START“标题”[/D路径][选项]“命令”[参数]
中。 start ""/W cmd/c "anycommand&exit/B 12345"
始终返回12345
退出代码。这是因为所有带有&
连接命令的 cmd 行都是在解析时准备好的(与括号中的命令 block 相同),然后完整地、不可分割地运行。省略&exit/B 12345
以从anycommand
获取正确的退出代码,或将其替换为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%
退出代码:0
或1
如果正确结束但-1073741510
如果通过 Ctrl+C 或 Ctrl+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
==>
关于windows - 批处理文件无法抑制 "terminate job",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866091/