0

这些命令位于启用了延迟扩展的 bat 文件中。我正在尝试检查不存在的命令,以便如果它失败,我的程序不会挂断,并且我有一个可以帮助我的标志。

这里的标志是path_check

set /a path_check=1
echo !PATH! | ( findatr /i "C:\\Windows\\System32;" 2>NUL || echo "here")

这会成功打印“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不是错字,这是故意的,因为我想检查一个不存在的命令。

4

3 回答 3

1

示例(0如果找到则打印,否则打印1):

设置 /a path_check=0
回声%PATH% | findstr /i "C:\\Windows\\System32;" 2>空值|| 设置 /a path_check=1
回声 %path_check%
于 2013-08-27T12:59:05.627 回答
1
newcommand >nul 2>nul & if errorlevel 9009 echo command doesn't exist (on the path)
于 2013-08-27T13:51:58.050 回答
0

您的代码有效,但不是您期望的!

该变量path_check设置为 1,但随着管道创建新的 cmd 上下文,该变量仅在此处有效/可访问。
在管道准备好后,子 cmd-context 以及变量将被删除。

但也许你应该改变你的解决方案,在你尝试启动它之前首先检查你的程序是否在路径中。

set "path_check=0"
for /f "delims=" %%I in ("findatr.exe") do (
  if "%~$PATH:I" == "" set "path_check=1"
)
echo %path_check%
于 2013-08-28T06:21:02.173 回答