Batch file 批次';对于';循环分析器
我有一小段代码,应该通过一个名为data.dta的文件进行解析,但出于某种原因,它一直在说(此时出乎意料,代码如下(我在给出错误的行旁边放了一条注释): data.dta的内容:Batch file 批次';对于';循环分析器,batch-file,Batch File,我有一小段代码,应该通过一个名为data.dta的文件进行解析,但出于某种原因,它一直在说(此时出乎意料,代码如下(我在给出错误的行旁边放了一条注释): data.dta的内容: VERSION=ALPHA 2 我可以发现一个主要问题,您需要启用延迟扩展才能使其正常工作 在代码块中,所有变量都将具有在代码块启动之前设置的值。如果在代码块内部设置变量,则该变量只有在代码块外部设置时才具有该值 试试这个例子: @echo off set var=1 echo %var% for /l %%i in
VERSION=ALPHA 2
我可以发现一个主要问题,您需要启用延迟扩展才能使其正常工作 在代码块中,所有变量都将具有在代码块启动之前设置的值。如果在代码块内部设置变量,则该变量只有在代码块外部设置时才具有该值 试试这个例子:
@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
…看看现在发生了什么
: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