@echo off
SET CONFIGS_QUASAR1=Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_6
SET CONFIGS_QUASAR2=Q2_1 Q2_2 Q2_3 Q2_4 Q2_5 Q2_6
SET CONFIGS_QUASAR3=Q3_1 Q3_2 Q3_3 Q3_4 Q3_5 Q3_6
SET CONFIGS_QUASAR0B=Q0B_1 Q0B_2 Q0B_3 Q0B_4 Q0B_5 Q0B_6
FOR %%A IN (QUASAR1 QUASAR2 QUASAR3 QUASAR0B) DO (
IF "%%A" == "QUASAR1" (
SET CONFIGS=%CONFIGS_QUASAR1%
) ELSE IF "%%A" == "QUASAR2" (
SET CONFIGS=%CONFIGS_QUASAR2%
) ELSE IF "%%A" == "QUASAR3" (
SET CONFIGS=%CONFIGS_QUASAR3%
) ELSE IF "%%A" == "QUASAR0B" (
SET CONFIGS=%CONFIGS_QUASAR0B%
)
echo %%A
echo %CONFIGS%
)
pause
我对批处理文件编程很新。 我编写了一个非常小的程序来在'if'条件下设置变量,但变量(“CONFIGS”)在上述程序中没有变得过时。
请检查程序并告诉我应该修改什么?
批处理文件的输出:
QUASAR1
Q0B_1 Q0B_2 Q0B_3 Q0B_4 Q0B_5 Q0B_6
QUASAR2
Q0B_1 Q0B_2 Q0B_3 Q0B_4 Q0B_5 Q0B_6
QUASAR3
Q0B_1 Q0B_2 Q0B_3 Q0B_4 Q0B_5 Q0B_6
QUASAR0B
Q0B_1 Q0B_2 Q0B_3 Q0B_4 Q0B_5 Q0B_6
答案 0 :(得分:1)
对不起。虽然您的问题与npocmaka在答案中指出的延迟扩展直接相关,但我想提请您注意以下建议。
当您使用延迟扩展时,您可以充分利用第二个(延迟)扩展的事实!可以处理先前已修改或%扩展%的文本。这是一个功能强大的批处理文件功能,可以避免复杂的操作。
例如,假设您有一个名为result
的变量,它将存储另一个名为term
的变量加上值1,2,3和11的总和。一种方法是这样做:
for %%a in (1 2 3 11) do (
if %%a == 1 (
set /A result=term+1
) else if %%a == 2 (
set /A result=term+2
) else if %%a == 3 (
set /A result=term+3
) else if %%a == 11 (
set /A result=term+11
)
echo The sum of !term! plus %%a is !result!
)
但是,您可以得出结论,所有这些IF都不是必需的,因为您可以通过这种方式直接获取第二项的值:
for %%a in (1 2 3 11) do (
set /A result=term+%%a
echo The sum of !term! plus %%a is !result!
)
嗯,同样的结论可能会以这种方式在您的代码中使用:
@echo off
setlocal EnableDelayedExpansion
rem Create CONFIGS_QUASAR 1, 2, 3 and 0B strings
FOR %%A IN (1 2 3 0B) DO (
rem Initialize this string
SET "CONFIGS_QUASAR%%A="
rem Fill this string with their values
FOR /L %%I IN (1,1,6) DO SET "CONFIGS_QUASAR%%A=!CONFIGS_QUASAR%%A! Q%%A_%%I"
)
FOR %%A IN (1 2 3 0B) DO (
SET CONFIGS=!CONFIGS_QUASAR%%A!
echo QUASAR%%A
echo !CONFIGS!
)
pause
输出:
QUASAR1
Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_6
QUASAR2
Q2_1 Q2_2 Q2_3 Q2_4 Q2_5 Q2_6
QUASAR3
Q3_1 Q3_2 Q3_3 Q3_4 Q3_5 Q3_6
QUASAR0B
Q0B_1 Q0B_2 Q0B_3 Q0B_4 Q0B_5 Q0B_6
答案 1 :(得分:0)
<强> delayed expansion!!! 强>
@echo off
SET CONFIGS_QUASAR1=Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_6
SET CONFIGS_QUASAR2=Q2_1 Q2_2 Q2_3 Q2_4 Q2_5 Q2_6
SET CONFIGS_QUASAR3=Q3_1 Q3_2 Q3_3 Q3_4 Q3_5 Q3_6
SET CONFIGS_QUASAR0B=Q0B_1 Q0B_2 Q0B_3 Q0B_4 Q0B_5 Q0B_6
setlocal enableDelayedExpansion
FOR %%A IN (QUASAR1 QUASAR2 QUASAR3 QUASAR0B) DO (
IF "%%A" == "QUASAR1" (
SET CONFIGS=CONFIGS_QUASAR1%
)
IF "%%A" == "QUASAR2" (
SET CONFIGS=%CONFIGS_QUASAR2%
)
IF "%%A" == "QUASAR3" (
SET CONFIGS=%CONFIGS_QUASAR3%
)
IF "%%A" == "QUASAR0B" (
SET CONFIGS=%CONFIGS_QUASAR0B%
)
echo %%A
echo !CONFIGS!
)
pause
答案 2 :(得分:0)
对于上述评论感到抱歉,
我得到了答案,批处理文件现在工作正常。 请参阅下面的更正代码。 非常感谢你:))
@echo off
Setlocal EnableDelayedExpansion
SET CONFIGS_QUASAR1=Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_6
SET CONFIGS_QUASAR2=Q2_1 Q2_2 Q2_3 Q2_4 Q2_5 Q2_6
SET CONFIGS_QUASAR3=Q3_1 Q3_2 Q3_3 Q3_4 Q3_5 Q3_6
SET CONFIGS_QUASAR0B=Q0B_1 Q0B_2 Q0B_3 Q0B_4 Q0B_5 Q0B_6
FOR %%A IN (QUASAR1 QUASAR2 QUASAR3 QUASAR0B) DO (
IF "%%A" == "QUASAR1" (
SET CONFIGS=%CONFIGS_QUASAR1%
) ELSE IF "%%A" == "QUASAR2" (
SET CONFIGS=%CONFIGS_QUASAR2%
) ELSE IF "%%A" == "QUASAR3" (
SET CONFIGS=%CONFIGS_QUASAR3%
) ELSE IF "%%A" == "QUASAR0B" (
SET CONFIGS=%CONFIGS_QUASAR0B%
)
echo %%A
echo !CONFIGS!
)
pause