CMD 脚本 - 无法在 FIND 中设置变量

CMD Script - cannot set variable within FIND

  1. 我使用外部程序生成字符串
  2. 我需要查明字符串中是否包含单词“not”
  3. 如果是这样,我设置了某个变量供以后使用。

1 和 2 可以正常工作,但我无法让 3 工作。

我的代码:

SET EXE="path\to\program.exe"

for /f "delims=" %%i in ('%EXE% argument') do (
rem echo %%i
set mystatus=%%i
)

echo %mystatus%

^ 到这里为止 ^ - echo return 是正确的值。现在我想要 return 一个更简单的值,告诉我 %mystatus% var

中是否存在字符串“not”
set "isNot="

ECHO.%mystatus%| FIND /I "not">Nul && ( 
  Echo.Found "not"
  do something
  rem ^this works^
  set isNot= "true"
) || (
  Echo.Did not find "not"
  do something
  rem ^this works^
  set isNot= "false"
)

现在,在 FIND 之外,这 return 没什么:为什么?

echo %isNot%

看来是愚蠢的错误。 设置变量时,= 后面不能有空格。 删除了空格,它可以正常工作。

我找到了你的答案 - 比方说,天真。

首先,我无法重现您的结果。它对我来说非常有效,返回 isnot 设置为 Space"false"Space“真”,不是nothing.

如果 isnot 未定义,则 echo 响应应该是 Echo is off,因此 isnot 中定义的你的测试。我将使用 echo +%isNot%+ 进行此测试,以便字符串显示时带有明显的分隔符。如果它只包含空格 - 那么,它们往往是非常不可见的。

至于解决方案,我建议

set "isnot="
if "%mystatus%" neq "%mystatus:not=%" set "isnot=Y"

这避免了 find 和管道和条件,将 isnot 设置为 definednot defined 适当,准备使用

进行测试
if defined isnot (echo not was not found) else (echo not was found)

原因是 if defined 作用于变量的 run-time 状态,因此它可以在 [=24= 中使用] 其中变量可以从一种状态切换到另一种状态。

使用 set "var=value" 设置字符串值 - 这避免了由尾随空格引起的问题。不要分配终端 \Space" - 从元素构建路径名 - 违反直觉,这可能会使过程更容易.

这可能是对您预期任务的猜测,但我的假设是您正在尝试确定可执行命令 returns 字符串 'path\to\program.exe' is not recognized as an internal or external command, operable program or batch file..

如果是这样,那么这对您来说可能是一个更好的整体解决方案:

@Set "exe=path\to\program.exe"
@For %%G In ("%exe%")Do @If "%%~aG" Lss "-" (Echo ERROR: No such object '%exe%')Else If "%%~aG" GEq "d" (Echo ERROR: '%exe%' is a directory object.)Else %%G argument

您需要更改的只是第 1 行的路径和 行末尾的字符串 argument ]2.