首页 > 解决方案 > 一个 IF 语句,用于检查并执行 Windows 批处理文件中每个设置变量的命令

问题描述

更新的解释:我有一个主批处理文件,根据执行时使用的参数,它使用子例程批处理脚本分支出来。所以,我需要帮助来获取一些预设值的名称(只有名称,即 TRIMAPP1、TRIMAPP2 等)并将它们用作上述子例程脚本的值。
在某种程度上,Stephan 建议的工作(%%a 值)为我提供了名称,但我需要能够同时使用每个结果。

SET TRIMAPP1=APP1
SET TRIMAPP2=APP2
SET TRIMAPP3=APP3
SET TRIMAPP4=APP4
SET TRIMAPP5=APP5

if [%1%]==[TRIMMER] GOTO ONE 
if not [%1%]==[2] GOTO NEXTSECTION 

:ONE
for /f "tokens=1,* delims==" %%a in ('set TRIMAPP') do echo var %%a

…然后需要对 %%a 的每个结果运行以下命令

SET BACKUP DIRECTORY=C:\bkp\”%%a” 
SET LOG DIRECTORY=C:\log\”%%a”_Logs
CALL C:\TRIM\TRIMMER.exe.

我期待……</p>

SET BACKUP DIRECTORY=C:\bkp\TRIMAPP1
SET BACKUP DIRECTORY=C:\bkp\TRIMAPP2
SET BACKUP DIRECTORY=C:\bkp\TRIMAPP3
SET BACKUP DIRECTORY=C:\bkp\TRIMAPP4
SET LOG DIRECTORY=C:\log\TRIMAPP1_Logs
SET LOG DIRECTORY=C:\log\TRIMAPP2_Logs
SET LOG DIRECTORY=C:\log\TRIMAPP3_Logs
SET LOG DIRECTORY=C:\log\TRIMAPP4_Logs

我希望这有助于更好地理解。很抱歉造成混乱,感谢您的耐心等待。谢谢!

标签: if-statementbatch-file

解决方案


SET没有等号时命令的行为可能对您有所帮助。从SET/?,我们可以看到

仅使用变量名称调用的 SET 命令,没有等号或值将显示其前缀与赋予 set 命令的名称匹配的所有变量的值。

因此,跑步SET TRIMAPP会给你:

TRIMAPP1=APP1
TRIMAPP2=APP2
TRIMAPP3=APP3
TRIMAPP4=APP4
TRIMAPP5=APP5

FOR命令可用于迭代命令的输出。使用"TOKENS=1,* DELIMS=="将在第一个等号之前和之后拆分输出,因此:

FOR /F "TOKENS=1,* DELIMS==" %%A IN ('SET TRIMAPP') DO (
    REM PERCENT-A CONTAINS THE NAME OF THE VARIABLE
    REM PERCENT-B CONTAINS THE VALUE OF THE VARIABLE
    ECHO.Variable %%A has the value %%B.
)

将打印

Variable TRIMAPP1 has the value APP1.
Variable TRIMAPP2 has the value APP2.
Variable TRIMAPP3 has the value APP3.
Variable TRIMAPP4 has the value APP4.
Variable TRIMAPP5 has the value APP5.

推荐阅读