【发布时间】:2014-12-14 23:38:18
【问题描述】:
我正在编写一个批处理命令脚本,其中检查环境变量。我需要通过传递所有必需的变量来编写一个 FOR 循环,然后验证它是否已定义,如果未定义,则提示该键的值并永久设置该变量。
问题是我无法取消引用循环变量并在环境变量中检查它。
示例代码如下:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%G IN (JBOSS_HOME, JAVA_HOME, ANT_HOME, PERFORCE_PATH, P4CLIENT) DO (
ECHO.
ECHO. Loop Item : %%G
:: Call a function by sending each value to check if it is set in ENVIRONMENT Variables, if not then add it persistently.
CALL:validateAndUpdate %%G
)
GOTO:EOF
:validateAndUpdate
:: Now I have to check if passed value is available in ENVIRONMENT variable or not
:: echo %~1 will print value like JBOSS_HOME
:: Below IF condition always substitues to IF ("JBOSS_HOME" == []) and it always returns true
:: but could not find syntax to use it to DE-reference and check if that key is set.
:: Ex: IF %JBOSS_HOME% == []
IF ("%~1" == []) (
ECHO.
ECHO. %~1 is empty
SET /p value="Enter value for '%~1' : "
:: Set that key value pair persistently using SETX
SETX %~1 "%value%"
) ELSE (
ECHO.
ECHO. %~1 is available as ENVIRONMENT variable
)
GOTO:EOF
ENDLOCAL
【问题讨论】:
-
我得到了一半的溶液,而不是
IF ("%~1" == [])需要使用IF("!%~1!" == []) -
即使未定义变量,它也会返回 true。也尝试了
IF ("!%~1!" == ""),但它仍然是ELSE条件 -
应该是
IF "!%~1!"==""注意没有==周围的空格,没有括号。那!%~1!是变量value,%~1是变量name -
@JosefZ,感谢您的回复,我尝试使用
IF !%~1!=="" (没有帮助,它仍然进入 ELSE 条件 -
仔细阅读:
IF "!%~1!"==""不是IF !%~1!==""注意双引号
标签: windows batch-file for-loop command