if-statement - 一个 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
我希望这有助于更好地理解。很抱歉造成混乱,感谢您的耐心等待。谢谢!
解决方案
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.
推荐阅读
- java - 如果 WHERE 得到空结果,则抛出 UPDATE 查询异常
- c# - Xamarin Forms 网页调用从不返回结果
- android - EmptyDatabaseAlert 显示两次
- firebase - Firestore - 可以通过数组不包含查询吗?
- php - 如何从不同的域访问 SQL 数据库
- ios - iOS Swift 更新到 UI 延迟
- node.js - 适用于 windows 和 linux 的 Nodejs node-gyp 构建
- arduino - 连接到 MQTT 时,Arduino MKRGSM 1400 给出的位置不正确
- python - 将整数变量引入数据帧时,它会被转换为浮点数。如何保持整数?
- javascript - 如何遍历任何字母数组并通过 DOM 中的每个字母进行动画处理