CMD 脚本 - 无法在 FIND 中设置变量
CMD Script - cannot set variable within FIND
- 我使用外部程序生成字符串
- 我需要查明字符串中是否包含单词“not”
- 如果是这样,我设置了某个变量供以后使用。
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
设置为 defined
或 not 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.
- 我使用外部程序生成字符串
- 我需要查明字符串中是否包含单词“not”
- 如果是这样,我设置了某个变量供以后使用。
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
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
设置为 defined
或 not 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.