为了测试目的,批量模拟失败和成功的命令调用

为了测试目的,批量模拟失败和成功的命令调用

是否有任何命令可以代替<command>,并用一些参数代替<argument_that_fails><argument_that_succeed>,以便在第一个脚本和第二个脚本上echo %IS_SUCCESS%打印?FALSETRUE

set IS_SUCCESS=FALSE
<command><argument_that_fails> && set IS_SUCCESS=TRUE
echo %IS_SUCCESS%
set IS_SUCCESS=FALSE
<command><argument_that_succeed> && set IS_SUCCESS=TRUE
echo %IS_SUCCESS%

答案1

这个将会成功:

type filethatexists.txt>nul &&...

这个会失败:

type filethatdoesntexist.txt>nul &&...

答案2

set IS_SUCCESS=FALSE
[command] [argument_that_fails] && set IS_SUCCESS=TRUE
echo %IS_SUCCESS%

set IS_SUCCESS=FALSE
[command] [argument_that_succeed]  && set IS_SUCCESS=TRUE
echo %IS_SUCCESS%

您的命令让我感觉到您正在寻求对受执行结果限制的操作的控制,就像成功时返回 0 而最终失败时返回非 0 一样。

什么/可以使用操作员获得,他们根据执行成功的返回结果采取行动:

set "IS_SUCCESS="
[command] [argument] && set "IS_SUCCESS=TRUE" || set "IS_SUCCESS=FALSE"
echo\%IS_SUCCESS%

也可以在块内使用条件执行

[command] [argument] && (execute because return 0) || (execute because return non 0)
set "IS_SUCCESS="
[command] [argument] && ( 

set "IS_SUCCESS=TRUE"
echo\ [command] [argument] succeed ) || (

set "IS_SUCCESS=FALSE" 
echo\ [command] [argument] fails )

echo\%IS_SUCCESS%

对于与块一起使用,可以有多种配置/布局/形状,具有多条线路,这将取决于与相关操作相适应的命令数量。

但是,也可以使用/有必要(取决于您的代码)在已在使用的运算符的执行块中使用这些运算符,如您在此处所见回答

2>nul findstr "\<4\>" "%tmp%\tmp.xml" >nul && (
2>nul findstr "\<5\>" "%tmp%\tmp.xml" >nul && (
goto error ) || goto warning ) || goto noerror

上面这个例子中值得注意的是,除了在块内外多次使用操作符之外,输出命令重定向器还用于抑制/省略任何错误消息、警告或成功命令的有效正常退出:

在此处输入图片描述

在命令执行测试的操作中可以做的另一件事是测试多次执行,其中重要的是假设整个命令块成功或失败时执行 x 或 y 操作:

(dir /b ,0 & type . <nul) && echo\All execution zOk! || echo\Something really wrong here!
  • 命令输出:
File Not Found
Access is denied.
Something really wrong here! 

用于2>nul抑制任何error消息和/或warnings

>2nul (dir /b ,0 & type . <nul) && echo\All execution zOk! || echo\Something really wrong here!
  • 命令输出:
Something really wrong here!

  • 回答你的问题,我对成功案例的建议是:
>2nul (dir /b , & type nul <nul) && echo\All execution zOk! || echo\Something really wrong
  • 命令输出:
All execution zOk!
  • 回答你的问题,我对失败情况的建议是:
@echo off && setlocal enabledelayedexpansion

set "IS_SUCCESS=" & 2>nul dir /b , >nul  && ( set "IS_SUCCESS=TRUE"
echo\ dir /b , succeed ) || ( set "IS_SUCCESS=FALSE" & echo\ dir /b , fails )

echo\%IS_SUCCESS%

endlocal
  • 命令输出:
TRUE
  • 回答你的问题,我对失败情况的建议是:
@echo off && setlocal enabledelayedexpansion

set "IS_SUCCESS=" & 2>nul dir /b ,0 >nul  && ( set "IS_SUCCESS=TRUE"
echo\ dir /b , succeed ) || ( set "IS_SUCCESS=FALSE" & echo\ dir /b , fails )

echo\%IS_SUCCESS%

endlocal
  • 命令输出:
FALSE
  • 一些失败的命令:
rd .
cd :
dir /,
dir ,0
type .
cd nul
set /a
tree nul
move con

  • 进一步阅读:

[√]重定向

[√]显示和重定向输出

[√]条件执行 || && ...

[√]启用扩展|延迟扩展

相关内容