2013-03-29 3 views
0

У меня есть небольшой блок кода, который должен анализировать файл с именем data.dta, но по какой-то причине он продолжает говорить (неожиданно в это время, вот код (я поставил комментарий линией, которая дает мне сообщение об ошибке):Batch 'FOR' Loop Parser

:load 
cd %appdata%\.Trek 
FOR /f "eol=#" %%t IN (Resources\Data\data.dta) DO (::problem line 
     set count=1 
    set cor=0 
    FOR /f "tokens=1-2 delims=^=" %%f IN ("%%t") DO (
     If %count% == 1 (
      IF %%f==VERSION set cor=1 
     ) 
     If %count% == 2 (
      IF %cor%==1 (
       set cor=0 
       set ver=%%f 
      ) 
     ) 
     set /a count=%count%+1 
    ) 
)  
Title TREK Unmounted Console Version: %ver% 

Содержание data.dta:

VERSION=ALPHA 2 

ответ

1

я могу запятнать одну серьезную проблему, то Вам необходимо включить замедленное расширение для его работы

.

В кодовом блоке ll будут иметь значение того, что они были установлены до начальный кодовый блок. Если вы установите переменную внутри код блока, он будет иметь только то значение, как только это вне блока кода.

Попробуйте этот пример:

@echo off 
set var=1 
echo %var% 
for /l %%i in (1,1,5) do (
    set /a var+=1 
    echo %var% 
) 
echo %var% 
pause>nul 

Выход будет:

1 
1 
1 
1 
1 
1 
6 

Теперь попробуйте с поздними расширениями с поддержкой, и заменить знаки процента с восклицательными знаками:

@echo off 
setlocal enabledelayedexpansion 
set var=1 
echo %var% 
for /l %%i in (1,1,5) do (
    set /a var+=1 
    echo !var! 
) 
echo %var% 

Выход:

1 
2 
3 
4 
5 
6 
6 

Таким образом, измените свой код:

:load 
cd %appdata%\.Trek 
setlocal enabledelayedexpansion 
FOR /f "eol=#" %%t IN (Resources\Data\data.dta) DO ( 
    set count=1 
    set cor=0 
    FOR /f "tokens=1-2 delims=^=" %%f IN ("%%t") DO (
     If !count! == 1 (
      IF %%f==VERSION set cor=1 
     ) 
     If !count! == 2 (
      IF !cor!==1 (
      set cor=0 
      set ver=%%f 
      ) 
     ) 
     set /a count+=1 
    ) 
)  
Title TREK Unmounted Console Version: %ver% 
endlocal 

... И посмотреть, что происходит сейчас.

+0

Спасибо, что решил – Croug