我有一小段代码应该通过一个名为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
答案 0 :(得分: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
......看看现在发生了什么。