【发布时间】:2012-05-20 03:15:49
【问题描述】:
我正在尝试在批处理文件中定义和使用变量。看起来应该很简单:
@echo off
set location = "bob"
echo We're working with "%location%"
我得到的输出如下:
We're working with ""
这里发生了什么?为什么我的变量没有被回显?
【问题讨论】:
标签: batch-file cmd environment-variables
我正在尝试在批处理文件中定义和使用变量。看起来应该很简单:
@echo off
set location = "bob"
echo We're working with "%location%"
我得到的输出如下:
We're working with ""
这里发生了什么?为什么我的变量没有被回显?
【问题讨论】:
标签: batch-file cmd environment-variables
= 之前的空格被解释为名称的一部分,它之后的空格(以及引号)被解释为值的一部分。所以你创建的变量可以用%location %引用。如果这不是您想要的,请删除定义中的多余空格。
【讨论】:
= 之前的空格被解释为名称的一部分,那么变量不能 被引用为%location%,它必须被引用为%location %。是不是打错字了?
alias x = y 不同?
x = y 时会做什么?
空格很重要。您创建了一个名为 'location ' 的变量
值为' "bob"'。 注意 - 添加了单引号以显示空间位置。
如果你想在你的值中加上引号,那么你的代码应该是这样的
set location="bob"
如果你不想要引号,那么你的代码应该是这样的
set location=bob
或者更好
set "location=bob"
最后一种语法可以防止无意的尾随空格进入值,还可以防止&|等特殊字符。
【讨论】:
%,如果启用了延迟扩展,则可能是!。但是如果值确实包含引号,那么您必须担心何时转义|、& 等有毒字符。
输入location.bat
@echo off
cls
set /p "location"="bob"
echo We're working with %location%
pause
输出
We're working with bob
(你犯的错误:space 和 " ")
【讨论】:
set /p 提示用户并将答案存储在指定的变量中。例如,set /p name="What is your name? " & echo Hello, %name%.
set /p "varname"="text" 错误,它创建了一个名为location" 的变量(带有尾随引号!)。应该是set /p location="bob"。但即便如此,它也不再符合问题
考虑也使用SETX - 它将在用户或机器(所有用户可用)级别设置变量,尽管该变量将在下次打开 cmd.exe 时可用,因此通常可以与 @ 一起使用987654323@:
::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% 这样的变量。
【讨论】: