我正在尝试在批处理文件中定义和使用变量。它看起来应该很简单:
@echo off
set location = "bob"
echo We're working with "%location%"
我得到的输出如下:
We're working with ""
这里发生了什么?为什么我的变量没有被回应?
答案 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的某些限制,例如名称中包含=
的变量。