windows - 批处理文件无法抑制 "terminate job"

标签 windows batch-file cmd

我正在尝试打开第二个批处理文件并检测它是否正常退出或由用户关闭(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
)

效果很好 那么有没有一种方法可以从同一个批处理文件开始并避免终止? 或者我是否必须从同一批处理创建一个新批处理并调用它? (我不希望他们也看到该文件)

最佳答案

  1. 不要将值分配给 volatile environment variable就像使用 set 命令的 errorlevel 一样。这样做会导致它在当前上下文中变得不稳定。
  2. Always use titleSTART“标题”[/D路径][选项]“命令”[参数]中。
  3. 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%退出代码: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

==>

关于windows - 批处理文件无法抑制 "terminate job",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866091/

相关文章:

c# - Windows 下 C++ 和 C# 中的套接字无法正常工作

windows - Sourcetree “git clone”给出错误 “fatal: ArgumentOutOfRangeException encountered. Specified argument was out of the range of valid values.”

windows - 隐藏批处理文件的 CMD 窗口

batch-file - 如何使用批处理文件停止和重新启动音频服务?

java - 执行net use命令

c++ - 如何在 Windows 中从 1 到 4 字节的 UTF-8 编码序列中获取代码点整数?

c++ - 如何检查 cmd 中是否显示编译器错误?

windows - 如何在 cmd 或 PowerShell 中跟踪符号/软链接(soft link)?

ssh - 如何在PuTTY命令行上设置私钥和环境变量

c++ - 如何在我的项目中嵌入 bat 文件?