如何从变量中的名称引用变量值?
How to reference a variable value from the name in a variable?
我用 Google 和 Whosebug 搜索都没有成功。也许我不知道使用正确的词来找到我要找的东西。
工作的简单视图是检查项目配置变量的存在性和正确性。如果未定义这些,则说明未正确设置。同样,如果目录不存在,则项目设置不正确。
=== project_setup.bat
@ECHO OFF
SET SOURCE_DIR=C:\src\project1
SET OBJECT_DIR=D:\intermediate\objects
SET TEST_DIR=C:\testing\project1
set SHIP_DIR=C:\final\project1
=== check_project_directories.bat
@ECHO OFF
SETLOCAL
SET EXITCODE=0
SET DIR_LIST=^
SOURCE_DIR ^
OBJECT_DIR ^
TEST_DIR ^
SHIP_DIR
FOR %%v IN (%DIR_LIST%) DO (
IF NOT DEFINED %%v (
ECHO %%v is not defined.
SET EXITCODE=1
) ELSE (
REM === How to use the value of the variable rather than the variable name?
IF NOT EXIST "%%v" (
ECHO Directory for %%v does not exist.
SET EXITCODE=1
)
)
)
EXIT /B %EXITCODE%
我相信这是您需要的花絮(在您的 ELSE
声明中):
SET VariableName=%%v
CALL SET VariableValue=%%!VariableName!%%
IF NOT EXIST "!VariableValue!" (
...
或更简洁(但可读性较差):
CALL SET VariableValue=%%%%v%%
IF NOT EXIST "!VariableValue!" (
...
两者都需要您将 SETLOCAL
命令更改为:
SETLOCAL EnableDelayedExpansion
本质上,通过在 SET
语句前添加 CALL
,您告诉脚本再次解析相应的行,但首先执行替换。
这实质上使 CALL SET VariableValue=%%!VariableName!%%
的计算结果为:
SET VariableValue=%SOURCE_DIR%
SET VariableValue=%OBJECT_DIR%
...
当它通过循环迭代时,会将 VariableValue
设置为您之前在配置中定义的相应变量值。
我用 Google 和 Whosebug 搜索都没有成功。也许我不知道使用正确的词来找到我要找的东西。
工作的简单视图是检查项目配置变量的存在性和正确性。如果未定义这些,则说明未正确设置。同样,如果目录不存在,则项目设置不正确。
=== project_setup.bat
@ECHO OFF
SET SOURCE_DIR=C:\src\project1
SET OBJECT_DIR=D:\intermediate\objects
SET TEST_DIR=C:\testing\project1
set SHIP_DIR=C:\final\project1
=== check_project_directories.bat
@ECHO OFF
SETLOCAL
SET EXITCODE=0
SET DIR_LIST=^
SOURCE_DIR ^
OBJECT_DIR ^
TEST_DIR ^
SHIP_DIR
FOR %%v IN (%DIR_LIST%) DO (
IF NOT DEFINED %%v (
ECHO %%v is not defined.
SET EXITCODE=1
) ELSE (
REM === How to use the value of the variable rather than the variable name?
IF NOT EXIST "%%v" (
ECHO Directory for %%v does not exist.
SET EXITCODE=1
)
)
)
EXIT /B %EXITCODE%
我相信这是您需要的花絮(在您的 ELSE
声明中):
SET VariableName=%%v
CALL SET VariableValue=%%!VariableName!%%
IF NOT EXIST "!VariableValue!" (
...
或更简洁(但可读性较差):
CALL SET VariableValue=%%%%v%%
IF NOT EXIST "!VariableValue!" (
...
两者都需要您将 SETLOCAL
命令更改为:
SETLOCAL EnableDelayedExpansion
本质上,通过在 SET
语句前添加 CALL
,您告诉脚本再次解析相应的行,但首先执行替换。
这实质上使 CALL SET VariableValue=%%!VariableName!%%
的计算结果为:
SET VariableValue=%SOURCE_DIR%
SET VariableValue=%OBJECT_DIR%
...
当它通过循环迭代时,会将 VariableValue
设置为您之前在配置中定义的相应变量值。