set var=%1
echo var
set command=""
IF var==true (
set command=dir
)
IF var==false (
set command=dir /a
)
echo %command%
%command%
Run Code Online (Sandbox Code Playgroud)
所以,如果我通过键入来运行此脚本
C:\>test true
Run Code Online (Sandbox Code Playgroud)
将echo %command%始终打印"".任何的想法?
Fra*_*ack 13
您缺少%任何变量解除引用所需的符号.
你可能想要这样:
set var=%1
echo %var%
set command=""
IF %var%==true ( <=== here
set command=dir
)
IF %var%==false ( <=== here
set command=dir /a
)
echo %command%
%command%
Run Code Online (Sandbox Code Playgroud)
您还应该用引号括起字符串比较以允许空格,如下所示:
IF "%var%"=="false"
Run Code Online (Sandbox Code Playgroud)
此外,正如Joey指出的那样,清除变量是通过
set command=
Run Code Online (Sandbox Code Playgroud)
没有任何报价.否则,您将使用这些引号初始化变量,从而导致您的奇怪输出.
如果您使用条件并设置条件,我发现该变量为空!
if errorlevel 0 (
Set localVar="fooBar"
echo "%localVar%"
)
Run Code Online (Sandbox Code Playgroud)
将导致空输出!
SetLocal EnableDelayedExpansion
Run Code Online (Sandbox Code Playgroud)
启用!VARNAME!它可以!VARNAME!在下面的条件中使用,但仍然不会%VARNAME%在条件块中启用输出!
使用 Set BEFORE 条件使其在条件块中可访问。OR 用法必须在使用 Set 的条件块之后。
(!) 目前我不知道如何在同一块中挑战 Set AND 用法!
请参阅https://gist.github.com/childnode/0f6c874ad79788a86332 中的一些示例代码
(!) 但是正如您在使用DelayedExpansion的结果(也在要点中)中看到的那样,它具有不同的副作用:
变量是在同一个 shell 中第二次运行时设置的(显然是正确的)但由于某些原因没有EnableDelayedExpansion在第二次运行中设置(似乎它还从脚本中清除了“本地”变量,并且不会为以下命令导出它!这个如果在“管道”中运行不同的批处理文件可能会导致其他错误