Jam*_*xon 427 cmd batch-file environment-variables
我正在尝试在批处理文件中定义和使用变量.它看起来应该很简单:
@echo off
set location = "bob"
echo We're working with "%location%"
Run Code Online (Sandbox Code Playgroud)
我得到的输出如下:
We're working with ""
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?为什么我的变量没有被回应?
Bri*_*xon 535
前面的空格=被解释为名称的一部分,后面的空格(以及引号)被解释为值的一部分.因此,您创建的变量可以引用%location %.如果这不是您想要的,请删除定义中的额外空格.
dbe*_*ham 255
空间很重要.您创建了一个名为(包含添加的单引号以显示空间位置)'location '
的变量,其值为' "bob"'.
如果你想要价值的报价,那么你的代码应该是这样的
set location="bob"
Run Code Online (Sandbox Code Playgroud)
如果您不想要引号,那么您的代码应该是这样的
set location=bob
Run Code Online (Sandbox Code Playgroud)
或者更好
set "location=bob"
Run Code Online (Sandbox Code Playgroud)
最后一种语法可以防止无意中的空格进入值,还可以防止像&|这样的特殊字符 等等
还考虑使用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
)
Run Code Online (Sandbox Code Playgroud)
您还可以直接编辑注册表值:
用户变量: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)
Run Code Online (Sandbox Code Playgroud)
另一个例子
::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"
)
Run Code Online (Sandbox Code Playgroud)
在 command.exe 中,您可以使用这样的变量cd %JAVAJDK%。
小智 5
输入 location.bat
@echo off
cls
set /p "location"="bob"
echo We're working with %location%
pause
Run Code Online (Sandbox Code Playgroud)
产量
We're working with bob
Run Code Online (Sandbox Code Playgroud)
(你做错了:space和" ")