Windows 当批处理文件中的第一个条件失败时,无法在或条件中设置变量
这些命令位于启用了延迟扩展的bat文件中。我试图检查一个不存在的命令,这样如果它失败,我的程序就不会挂断,我有一个标志可以帮助我 这里的标志是路径检查:Windows 当批处理文件中的第一个条件失败时,无法在或条件中设置变量,windows,batch-file,environment-variables,Windows,Batch File,Environment Variables,这些命令位于启用了延迟扩展的bat文件中。我试图检查一个不存在的命令,这样如果它失败,我的程序就不会挂断,我有一个标志可以帮助我 这里的标志是路径检查: set /a path_check=1 echo !PATH! | ( findatr /i "C:\\Windows\\System32;" 2>NUL || echo "here") 成功打印“此处”: set /a path_check=1 echo !PATH! | ( findatr /i "C:\\Windows\\Syst
set /a path_check=1
echo !PATH! | ( findatr /i "C:\\Windows\\System32;" 2>NUL || echo "here")
成功打印“此处”:
set /a path_check=1
echo !PATH! | ( findatr /i "C:\\Windows\\System32;" 2>NUL || set /a path_check=1
)
echo !path_check!
这将打印1而不是0
我不能把任何事情归因于这种不一致的行为。如果命令存在但失败,否则程序响应良好
编辑
根据响应,我想强调我使用的是一个不存在的命令,而不是一个返回错误但在其他情况下存在的命令findatr
不是打字错误,这是故意的,因为我想检查不存在的命令。示例(如果找到,则打印0
,否则打印1
):
设置/a路径检查=0
echo%PATH%| findstr/i“C:\\Windows\\System32;“2>num | | set/a PATH_check=1
回显%path\u check%
你的代码可以工作,但不是你期望的那样 变量
path\u check
设置为1,但当管道创建新的cmd上下文时,该变量仅在此处有效/可访问。管道准备就绪后,将删除sub cmd上下文和变量 但也许您应该将解决方案更改为在尝试启动程序之前,首先检查程序是否在路径中
set "path_check=0"
for /f "delims=" %%I in ("findatr.exe") do (
if "%~$PATH:I" == "" set "path_check=1"
)
echo %path_check%
是的,这是因为findstr被识别。假设我有一个无法识别的命令,如“findatr”或其他在我的系统上失败的命令。您也可以使用
find/I“C:\Windows\System32;”2>NUL
我理解这一点,因为find和findstr是可用的命令。但是假设我有一个命令,它是N/a,与它的输出失败不同。例如,如果我键入echo%PATH%|endro this 2>num | | set/a PATH_check=0
现在它不工作,而我希望它现在设置PATH_check=0。
newcommand >nul 2>nul & if errorlevel 9009 echo command doesn't exist (on the path)
set "path_check=0"
for /f "delims=" %%I in ("findatr.exe") do (
if "%~$PATH:I" == "" set "path_check=1"
)
echo %path_check%