gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:25:39 26 4
gpt4 key购买 nike

我正在编写一个调用命令的批处理文件,我想处理可能导致的任何错误。我要求我只使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com