Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 当批处理文件中的第一个条件失败时,无法在或条件中设置变量_Windows_Batch File_Environment Variables - Fatal编程技术网

Windows 当批处理文件中的第一个条件失败时,无法在或条件中设置变量

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

这些命令位于启用了延迟扩展的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\\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%