我似乎无法将批处理脚本中的环境变量分配给另一个环境变量。
例如,这将有效:
set varA=C:\this\is\a\directory
我可以愉快地使用
find /I "MyString" %varA%
毫无意外。但是,如果我尝试以这种方式分配它,
varA=%ENVVAR%\more\dirs
该批处理只会停留在 CMD 窗口中,直到我停止它。
我仍在学习 Windows令人讨厌的独特脚本,因此我只能推测它因为将一个变量分配给另一个变量而发脾气。
答案1
在批量设置变量时需要注意的一件事是不要不必要地使用空格。(我没有在您的问题中看到这一点,但我想指出这一点,因为我在解决问题时发现自己这样做了。)例如:
set x=123
不同于
set x = 123
前者将设置%x%
为123
,而后者将设置%x %
为。 (请注意变量名123
后面的空格,以及定义前面的另一个空格。)x
123
需要注意的另一件事是,您不能只说var=value
。要设置环境变量,您必须使用SET
命令。
因此,设置包含路径的环境变量并扩展该路径的环境变量的正确语法如下:
set x=C:\This\is\a\directory
set y=%x%\more\dirs
然后您可以使用该SET
命令来验证这些变量的内容。
但是,如果您只是在学习 Windows 中的脚本语言,那么跳过批处理并直接进入 PowerShell 可能对您更有用。PowerShell 是 Windows Vista 及更高版本的标准配置,也适用于 XP。以下是在 PowerShell 中完成相同工作的方法。
$x='C:\This\is\a\directory'
$y="$x\more dirs"
$y
(注意:设置时使用双引号,而使用单引号是有原因的$x
。在这种情况下,我们可以使用任一引号进行设置,$x
但由于我们需要扩展变量,因此设置时必须使用双引号$y
。随着您学习该语言,您将学到更多有关这方面的知识。)
然后,为了验证变量,您可以直接调用它们。
在大多数情况下,PowerShell 对间距的敏感度也较低。
$x=123
是相同的
$x = 123