2015-05-14 3 views
0
@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 

Я очень новичок в пакетном программировании. Я написал очень маленькую программу, чтобы установить переменную внутри условия «если», но переменная («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

Извините за выше комментарий,

я получил ответ, пакетный файл теперь работает нормально. См. Исправленный код ниже. Большое спасибо :)

@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 
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 
+0

QUASAR1 конфиги! QUASAR2 ! CONFIGS! QUASAR3 ! CONFIGS! QUASAR0B ! CONFIGS! –

+0

Im получение вышеупомянутого выхода. что мне делать? –

+0

@JoeJoseph: Вам нужно включить команду SETLOCAL ENABLEDELAYEDEXPANSION' в начале, чуть ниже '@echo off'. – Aacini

1

Простите. Хотя ваша проблема напрямую связана с Delayed Expansion, как указал npocmaka в своем ответе, я хотел бы привлечь ваше внимание к следующему совету.

Когда вы используете Delayed Expansion, вы можете хорошо использовать тот факт, что второе (отложенное)! Расширение! может работать над текстом, который был ранее изменен или% расширен.%. Это мощная функция пакетного файла, которая может избежать сложных манипуляций.

Например, предположим, что у вас есть переменная 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! 
) 

Однако, вы можете сделать вывод, что все эти ИФ не нужны, потому что вы можете непосредственно принимать значение второго слагаемого таким образом:

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 
Смежные вопросы