Batch file 为什么不设置变量

Batch file 为什么不设置变量,batch-file,Batch File,我有一个report.txt文件,它有逗号分隔的值,如(1,2,3,4)。我正在检查文件是否为空,然后在文件中为4个变量赋值。但变量没有设置。有人知道为什么会这样吗 setlocal enabledelayedexpansion for /f %%i in ("Report.txt") do set size=%%~zi if %size% gtr 0 ( for /F "tokens=1-4 delims=," %%A in ("Report.txt") do (

我有一个report.txt文件,它有逗号分隔的值,如(1,2,3,4)。我正在检查文件是否为空,然后在文件中为4个变量赋值。但变量没有设置。有人知道为什么会这样吗

setlocal enabledelayedexpansion

    for /f %%i in ("Report.txt") do set size=%%~zi 
    if %size% gtr 0 (

    for /F "tokens=1-4 delims=," %%A in ("Report.txt") do (
        set "var1=%%a"
        set "var2=%%b"
        set "var3=%%c"
        set "var4=%%d"

    )
    set var
    )
    echo %var1%

您已启用延迟扩展,但未使用它。为了使用延迟扩展,您需要使用
!变数而不是
%variable%
。此外,在
中为
循环指定的变量区分大小写,因此您需要将var1设置为等于
%%A
或使用
%%A
作为循环变量

setlocal enabledelayedexpansion

for /f %%i in ("Report.txt") do set size=%%~zi 
if %size% gtr 0 (

    for /F "tokens=1-4 delims=," %%a in (Report.txt) do (
        set "var1=%%a"
        set "var2=%%b"
        set "var3=%%c"
        set "var4=%%d"
    )
    set var
)
echo !var1!
我改变了代码如下,它开始工作。谢谢你们抽出时间。缓和一下

for /F "tokens=1-4 delims=," %%A in (%cd%\Report.txt) do (
    set "var1=%%A"
    set "var2=%%B"
    set "var3=%%C"
    set "var4=%%D"    

)
set var
)
echo !var1!

谢谢你的回复。我已经尝试过了,但是回音输出是%a,而不是预期的输出1@bob如果您试图读取Report.txt的内容,则需要使用USEBACKQ选项,因为文件名中有引号。或者,您可以从文件名中删除引号。谢谢您的时间。我尝试删除引号并在(“Report.txt”)中为/F“USEBACKQ tokens=1-4 delims=,”%%A删除引号(但两者都不起作用。删除引号会使代码挂起,添加USEBACKQ会产生与%a相同的输出,而不是1如果您试图读取Report.txt的内容,则需要使用USEBACKQ选项,因为文件名包含引号。或者,您可以简单地从文件名中删除引号。Doh!!!!Case Sen变量为正楷。当然!一次性变量在批处理中区分大小写!似乎将FOR变量更改为小写比更改所有SET语句更容易。;)如果不写这个答案,我也会更容易接受我的答案,因为它们实际上是一样的。感谢你们的帮助,并花时间解释所有这些。我对批处理编程非常陌生,但从所有这些帖子中学习。非常感谢。
for /F "tokens=1-4 delims=," %%A in (%cd%\Report.txt) do (
    set "var1=%%A"
    set "var2=%%B"
    set "var3=%%C"
    set "var4=%%D"    

)
set var
)
echo !var1!