这个问题似乎(非常)愚蠢,我无法处理它:(
当我尝试这个批处理代码时:
if "%1" == "-i" (
set is = %2
echo. %is%
shift
)
使用 2 个(或更多)参数调用,它不起作用。它实际上打印出一个空白。 “shift”命令也没有完成。当我观看执行的代码(开头没有@echo off)时,我可以看到“set”命令已完成。
它出什么问题了?
调用示例:
c:\script.bat -i test -d bla
你有两个问题。默认情况下,括号中的语句组将同时完成变量扩展,即在您之前set
命令。还有语义set
是错误的,你不希望周围有空格=
.
将其添加到文件的顶部:
setlocal ENABLEDELAYEDEXPANSION
并删除周围的空格=
in set
:
set is=%2
最后使用延迟扩展:
echo. !is!
可能的第三个问题是您可能需要两个SHIFT
s,一个用于-i
,其中一个是is
争论。
Update
感谢 @dbenham 指出这不是语法错误set
,这只是令人惊讶的行为,值得稍微解释一下。如果执行这些命令:
set a=one
echo "%a%"
结果是:
"one"
这是有道理的,但请尝试:
set b = two
echo "%b%"
你得到:
"%b%"
什么?这就是您在环境变量时所期望的b
未设置。但我们just设置它。或者我们是否:
echo "%b %"
显示:
" two"
对于 Windowsset
命令,与我所知道的任何其他语言或环境不同,空格很重要。前面的空格=
成为环境变量名称的一部分,后面的空格成为值的一部分。这种不常见的行为是编写 Windows 批处理程序时常见的错误来源。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)