If statement 对windows批处理文件中的每个变量集检查并执行命令的IF语句

If statement 对windows批处理文件中的每个变量集检查并执行命令的IF语句,if-statement,batch-file,If Statement,Batch File,最新解释: 我有一个主批处理文件,根据其执行中使用的参数,用子例程批处理脚本进行分支。因此,我需要帮助获取一些预设值的名称(仅名称,即TRIMAPP1、TRIMAPP2等),并将其用作所述子例程脚本的值。 在某种程度上,Stephan建议的方法(%%a值)可以为我提供名称,但我需要能够同时使用每个结果 SET TRIMAPP1=APP1 SET TRIMAPP2=APP2 SET TRIMAPP3=APP3 SET TRIMAPP4=APP4 SET TRIMAPP5=APP5 if [%1%

最新解释: 我有一个主批处理文件,根据其执行中使用的参数,用子例程批处理脚本进行分支。因此,我需要帮助获取一些预设值的名称(仅名称,即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.
我期待着

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.
)
将打印

变量TRIMAPP1的值为APP1。
变量TRIMAPP2的值为APP2。
变量TRIMAPP3的值为APP3。
变量TRIMAPP4的值为APP4。
变量TRIMAPP5的值为APP5。

根据我从您的解释中收集的信息,您试图使用一个参数来搜索一组相关变量,以查找与所述参数匹配的值

您可以使用前面提到的方法,并将其作为部分答案重新设置为管道输出到Findstr,然后如果使用
&&
找到字符串,则有条件地执行其他命令。例如:

For/f“tokens=1*Delims==”%%G in('Set“TRIMMAPP')Do(
Echo(%%H |%_uuappdir_uuu%findstr.exe/LIC:“Str”&&(
回声(%%G=%%H)
)
)
为了在不同的搜索字符串中使用上述方法,您可以使用标签并使用搜索字符串的参数调用标签,从而使其成为函数。 通过使用2个参数,可以提高重用性,以允许与其他变量/变量组一起使用

@Echo关闭
设置TRIMAPP1=APP1
设置TRIMAPP2=APP2
设置TRIMAPP3=APP3
设置TRIMAPP4=APP4
设置TRIMAPP5=APP5
对于(2 4)中的%%i,请拨打:FindVal TRIMAPP%%i
暂停
退出/b0
:FindVal
对于/f“tokens=1*Delims==”%%G in('Set“%~1”)Do(
Echo(“%%H”|%uuu AppDir_uuuu%findstr.exe/LIC:“%2”>nul&&(
回声(%%G=%%H)
)
)
退出/b0
注意,应根据您是搜索包含该值的匹配项,还是搜索精确值的匹配项来调整findstr的使用情况。

for/F“tokens=1*delims==”%%p IN('set TRIMAPP')DO(
for /F "tokens=1*delims==" %%p IN ('set TRIMAPP') DO (
 echo %%%%.p=%%~p %%%%.q=%%~q ^<^<
 SET BACKUP DIRECTORY=C:\bkp\%%p 
 SET LOG DIRECTORY=C:\log\%%pLogs
 CALL C:\TRIM\TRIMMER.exe
)

echo%%%.p=%%~p%%%.q=%%~q^
for/f“tokens=1,*delims==”%%%a in('set TRIMAPP'))do echo var%%a有值%%b
应该会给你一个好的开始。遗憾的是,你的其余代码让我感到困惑,因此如果你需要更多帮助,请更清楚。我在你提供的代码中没有看到
if
语句。我也看不到
trimpap
变量在其余代码中如何发挥作用。这些变量在e代码的其余部分。请您重新访问您的问题,使您的任务和问题变得清晰和可回答。目前它没有意义,迄今为止提供的评论和答案只是猜测您的意图。为了让此网站帮助您,我们需要能够复制您的环境、任务和代码。目前我们无法不要这样做,所以你的问题就脱离主题了。请阅读,并通读的所有页面,以了解你需要什么,从我们的网站获得最佳体验;谢谢。