为什么没有设置变量

问题描述:

我有一个文件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% 
+1

如果你想在REPORT.TXT的内容阅读,那么你需要,因为你必须在文件名括起来使用usebackq选项。 – Squashman

+1

或者,您可以简单地从文件名中删除引号。 – SomethingDark

+2

Doh !!!!区分大小写FOR变量。 – Squashman

您已启用延迟扩展,但您没有使用它。为了使用延迟扩展,您需要使用!variable!而不是%variable%。此外,for循环中指定的变量区分大小写,因此您需要将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! 
+0

感谢您的回复。我曾尝试过,但回波输出是%a而不是预期的输出,因为1 – bob

+0

@bob如果您正在尝试读取Report.txt的内容,那么您需要使用USEBACKQ选项,因为您的文件名在引号。 – Squashman

+0

或者,您可以从文件名中删除引号。 – SomethingDark

setlocal enabledelayedexpansion 

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

我改变了代码如下,并开始工作。谢谢你们的时间。解释它。

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! 
+0

看起来好像更容易将FOR变量更改为小写,而不是更改所有SET语句;) – Squashman

+1

也可以更容易地接受我的答案而不是写这是因为它们几乎完全相同。 – SomethingDark

+1

谢谢你们的帮助,并且花时间解释这一切。我对批量编程非常陌生,但从所有这些帖子中学习。欣赏它。 – bob