windows - 仅在出错时解析命令的输出,并且仅使用 native 批处理命令

标签 windows redirect batch-file command-line

我正在编写一个调用命令的批处理文件,我想处理可能导致的任何错误。我要求我只使用 native CLI 命令;换句话说,我知道如果我使用 PowerShell 或其他任何东西,我可以轻松完成此操作,但我没有。

我想要的是如果发生错误,检查输出,如果错误是预期的,继续处理,否则中止。但是,我无法以有用的方式解析输出。

这似乎是我能得到的最接近的:

command | (find /i "valid" >NUL && goto :okay || goto :stop)

在这里,我将命令的输出传送到 find。问题是,无论命令的退出状态如何,都会发生这种情况 - 它会同时发送成功和失败消息。一种选择是:

command 1>NUL 2>(find /i "valid" >NUL && goto :okay || goto :stop)

但是,这不起作用,因为它试图重定向到一个文件; find 命令没有接收到输入。

(出于测试目的,command是回显消息的cmd文件,错误时exit/b 1)

有什么想法吗?

最佳答案

根据您列出的已知信息

  • 成功时,errorlevel = 0
  • 出错时,errorlevel = 1。
  • 出错时,错误消息将写入 STDERR (2) 流。
  • 出现“预期”错误时,输出“有效”一词。

试试这个:

command 2>&1 1>nul | ( find /i "valid" >nul && goto okay || goto stop )

注意:输出重定向发生的顺序很重要!

CMD 从左到右解析重定向。这是将 STDERR 指向 STDOUT,然后将 STDOUT 指向 NUL。把它们想象成指针。在我们将 STDOUT 设置为 NULL 之前,STDERR 正在获取 STDOUT 的地址。

更新

  • 出错时,错误消息将写入 STDOUT (1) 流。

选项 A:

call command > "%Temp%\out.txt" && goto okay || ( find /i "valid" "%Temp%\out.txt" >nul && goto okay || goto stop )

选项 B:

( call command && echo valid ) | find /i "valid" >nul && goto okay || goto stop

关于windows - 仅在出错时解析命令的输出,并且仅使用 native 批处理命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302985/

相关文章:

python - os.path.join - 我可以获得 Windows 和 Cygwin 之间的一致性吗?

c# - 如何更改选项卡控件的名称

php - Yii2:如何使用 POST 方法重定向?

windows - 如何将命令输出批量设置为变量

string - 基于文件名的批量移动,不带分隔符,仅字符串

windows - 在 Go 中执行一个 vbscript

python - 使用 Python 和正则表达式解析 windows 命令结果

PHP页面重定向

.htaccess - 更改托管域的文档根目录?

performance - 帮助如何编写用于负载测试的批处理脚本