0

我有一小段代码应该通过一个名为 data.dta 的文件进行解析,但由于某种原因它一直在说(此时出乎意料,这是代码(我在给我错误的行旁添加了注释) :

: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
4

1 回答 1

1

我可以发现一个主要问题,您需要启用延迟扩展才能使其工作。

在代码块中,所有变量都将具有在代码块开始之前设置的值。如果您在代码块内设置变量,则只有在代码块之外它才会具有该值。

试试这个例子:

@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

...看看现在会发生什么。

于 2013-03-29T02:04:35.123 回答