批处理脚本 - Set/Define 环境变量,如果还没有 set/defined
Batch script - Set/Define environment variable if not already set/defined
我需要一个批处理脚本作为
调用
SetEnvironmentVariableIfNotSet.bat environment_variable_name <value>
来自另一个脚本或命令行。
我绝不是 Windows 批处理脚本方面的专家,但通过反复试验并将不同的东西拼凑在一起,到目前为止我已经想出了这个:
@setlocal EnableDelayedExpansion
@if "!%1!"=="" (
echo '%1' undefined. Defining with value
echo %2
endlocal DisableDelayedExpansion
goto :define_variable
) else (
echo '%1' already defined with value
echo !%1!
endlocal DisableDelayedExpansion
goto :eof
)
:define_variable
@set "%1=%2"
调用时,执行我需要的操作:
C:\>call DefEnvVarIfNotDef.bat ASD "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
'ASD' undefined. Defining with value
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
C:\>echo %ASD%
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
在这里寻求 better/an 最佳解决方案。
这个在我看来确实很丑。
您可以只使用 If Defined
或 If Not Defined
:
@Echo Off
If "%~1"=="" GoTo :EOF
If Defined %~1 (
Echo='%~1' already defined with value
Call Echo=%%%~1%%
Pause
GoTo :EOF
)
If "%~2"=="" GoTo :EOF
Echo='%~1' undefined, defining with value
Echo=%~2
Set "%~1=%~2"
Pause
我需要一个批处理脚本作为
调用SetEnvironmentVariableIfNotSet.bat environment_variable_name <value>
来自另一个脚本或命令行。
我绝不是 Windows 批处理脚本方面的专家,但通过反复试验并将不同的东西拼凑在一起,到目前为止我已经想出了这个:
@setlocal EnableDelayedExpansion
@if "!%1!"=="" (
echo '%1' undefined. Defining with value
echo %2
endlocal DisableDelayedExpansion
goto :define_variable
) else (
echo '%1' already defined with value
echo !%1!
endlocal DisableDelayedExpansion
goto :eof
)
:define_variable
@set "%1=%2"
调用时,执行我需要的操作:
C:\>call DefEnvVarIfNotDef.bat ASD "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
'ASD' undefined. Defining with value
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
C:\>echo %ASD%
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
在这里寻求 better/an 最佳解决方案。 这个在我看来确实很丑。
您可以只使用 If Defined
或 If Not Defined
:
@Echo Off
If "%~1"=="" GoTo :EOF
If Defined %~1 (
Echo='%~1' already defined with value
Call Echo=%%%~1%%
Pause
GoTo :EOF
)
If "%~2"=="" GoTo :EOF
Echo='%~1' undefined, defining with value
Echo=%~2
Set "%~1=%~2"
Pause