是否有任何命令可以代替<command>
,并用一些参数代替<argument_that_fails>
和<argument_that_succeed>
,以便在第一个脚本和第二个脚本上echo %IS_SUCCESS%
打印?FALSE
TRUE
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
关于,考虑在涉及操作符、块、多重循环
setlocal enabledelayedexpansion
的情况下使用它for
关于在变量中使用双引号(
set "_varible=values"
)好吧,可以说几年前我仅通过使用它们就找到了内心的平静……
- 进一步阅读:
[√]重定向
[√]显示和重定向输出
[√]启用扩展|延迟扩展