在批处理文件中定义和使用变量

时间:2012-05-11 13:57:52

标签: batch-file cmd environment-variables

我正在尝试在批处理文件中定义和使用变量。它看起来应该很简单:

@echo off

set location = "bob"
echo We're working with "%location%"

我得到的输出如下:

We're working with ""

这里发生了什么?为什么我的变量没有被回应?

4 个答案:

答案 0 :(得分:507)

=之前的空格被解释为名称的一部分,其后面的空格(以及引号)被解释为值的一部分。因此,您创建的变量可以使用%location %引用。如果这不是您想要的,请删除定义中的额外空格。

答案 1 :(得分:235)

空间很重要。您创建了一个名为(包含添加的单引号以显示空间位置)的变量'location ' 值为' "bob"'

如果您想要价值中的引号,那么您的代码应该是

set location="bob"

如果您不想要引号,那么您的代码应该是

set location=bob

或者更好

set "location=bob"

最后一种语法可以防止无意中的尾随空格进入值,并且还可以防止像&这样的特殊字符。 |等

答案 2 :(得分:5)

输入location.bat

@echo off
cls

set /p "location"="bob"
echo We're working with %location%
pause

输出

We're working with bob

(你做错了:space" "

答案 3 :(得分:0)

还考虑使用SETX-尽管该变量可在cmd.exe的下一次打开时使用,但它将在用户或计算机(所有用户可用)级别上设置变量,因此通常可以一起使用与SET一起使用:

::setting variable for the current user
if not defined My_Var (
  set "My_Var=My_Value"
  setx My_Var My_Value
)

::setting machine defined variable
if not defined Global_Var (
  set "Global_Var=Global_Value"
  SetX Global_Var Global_Value /m
)

您还可以直接编辑注册表值:

用户变量:HKEY_CURRENT_USER \ Environment

系统变量:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment

这将允许避免对SET和SETX的某些限制,例如名称中包含=的变量。