Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批次';对于';循环分析器_Batch File - Fatal编程技术网

Batch file 批次';对于';循环分析器

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

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

data.dta的内容:

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