我用Google搜索并搜索了Stackoverflow但没有成功。也许我不知道使用正确的词语来找到我正在寻找的东西。
这种努力的简单观点是检查项目配置变量的存在性和正确性。如果未定义这些,则说明设置不正确。同样,如果目录不存在,则项目设置不正确。
=== 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%
答案 0 :(得分:1)
我相信这是你需要的一点点(在ELSE
声明中):
SET VariableName=%%v
CALL SET VariableValue=%%!VariableName!%%
IF NOT EXIST "!VariableValue!" (
...
或者更简洁(但不太可读):
CALL SET VariableValue=%%%%v%%
IF NOT EXIST "!VariableValue!" (
...
要么您要求将SETLOCAL
命令更改为:
SETLOCAL EnableDelayedExpansion
基本上通过在CALL
语句前添加SET
,您告诉脚本再次解析相应的行,但首先执行替换。
这实质上使CALL SET VariableValue=%%!VariableName!%%
评估为:
SET VariableValue=%SOURCE_DIR%
SET VariableValue=%OBJECT_DIR%
...
当它经历循环迭代时,会将VariableValue
设置为先前在配置中定义的相应变量值。