我试图在批处理文件中定义和使用一个变量。它看起来应该很简单:
@echo off
set location = "bob"
echo We're working with "%location%"
我得到的输出如下:
We're working with ""
这是怎么回事?为什么我的变量没有被回显?
我试图在批处理文件中定义和使用一个变量。它看起来应该很简单:
@echo off
set location = "bob"
echo We're working with "%location%"
我得到的输出如下:
We're working with ""
这是怎么回事?为什么我的变量没有被回显?
当前回答
输入location.bat
@echo off
cls
set /p "location"="bob"
echo We're working with %location%
pause
输出
We're working with bob
(你犯的错误:空格和" ")
其他回答
=之前的空格被解释为名称的一部分,它之后的空格(以及引号)被解释为值的一部分。因此,可以使用%location %引用您创建的变量。如果这不是你想要的,删除定义中额外的空格。
也可以考虑使用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的一些限制,如变量名称中包含=。
第三方编辑
SETX.exe 永久设置环境变量, SETX可用于设置机器(HKLM)或当前登录用户(HKCU)的环境变量:
选择/ m
/m
Set the variable in the system environment HKLM.
(The default is the local environment HKCU)
另一个例子
::setting variable for the current user
if not defined JAVAJDK (
set "JAVAJDK=C:\Program Files\Java\jdk-13\bin"
setx JAVAJDK "C:\Program Files\Java\jdk-13\bin"
)
在command.exe中,可以使用这样的变量cd %JAVAJDK%。
输入location.bat
@echo off
cls
set /p "location"="bob"
echo We're working with %location%
pause
输出
We're working with bob
(你犯的错误:空格和" ")
这些空间意义重大。你创建了一个名为location的变量 值为 “bob”。注意:添加了封闭的单引号来显示空格的位置。
如果您想在值中加上引号,那么您的代码应该如下所示
set location="bob"
如果不需要引号,那么代码应该如下所示
set location=bob
或者更好
set "location=bob"
最后一种语法可以防止在值中出现意外的尾随空格,还可以防止使用& |等特殊字符。