2015-01-26 2 views
1

Я работаю над этой лил»скрипт, который считывает столбцы из входного файла:Batch - установка переменной с помощью IF оператора в цикл «застрял»

@echo off 
setlocal enabledelayedexpansion 
FOR /F "tokens=2,3,4,5,7,8,9,12,14" %%a IN ('type %1') do (
    set event="NULLA" 
    echo %event% - %%h 
    if "%%h"=="i" (set event=FELTOLTES) 
    echo %event% - %%h 
    if "%%h"=="o" (set event=LETOLTES) 
    echo %event% - %%h 
    if "%%h"=="d" (set event=TORLES) 
    echo %event% - %%h 
    echo --------------------- 
} 

Однако, если я запускаю его,% событие% переменный на всех этапах (даже первой, перед if "%%h"=="i"), а также все строки входного файла является «TORLES», который определяется в последнем IF заявлении:

TORLES - i 
TORLES - i 
TORLES - d 
TORLES - i 
TORLES - d 
TORLES - d 
TORLES - o 
TORLES - d 

я делаю что-то неправильно Вот? Пробовал добавлять-удалять кавычки вокруг операторов IF, но не добился успеха.

ответ

1
@echo off 
setlocal enabledelayedexpansion 
FOR /F "tokens=2,3,4,5,7,8,9,12,14" %%a IN ('type %1') do (
    set event="NULLA" 
    echo !event! - %%h 
    if "%%h"=="i" (set event=FELTOLTES) 
    echo !event! - %%h 
    if "%%h"=="o" (set event=LETOLTES) 
    echo !event! - %%h 
    if "%%h"=="d" (set event=TORLES) 
    echo !event! - %%h 

    echo --------------------- 
) 

При использовании отложенного расширения и попытаться установить переменные/доступ в кронштейнах контексте вам нужно получить к нему доступ с ! вместо %

+0

Святого дерьма, это сработало. Можете ли вы объяснить, почему это так? Звук действительно интуитивно понятен мне. – LordZozzy

+0

@LordZozzy - вот некоторые объяснения и примеры - http://ss64.com/nt/delayedexpansion.html. С '% ..%' значение расширяется \ заменяется во время чтения скрипта, и все в скобках взято для однострочное выражение. С задержкой расширения и '! ..!' выражение заменяет \ расширяется во время выполнения, и если есть какие-либо изменения в значении переменной, они учитываются. – npocmaka

+0

Спасибо, это было проницательно. – LordZozzy

Смежные вопросы