为什么没有设置变量
我有一个文件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!
而不是%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!
感谢您的回复。我曾尝试过,但回波输出是%a而不是预期的输出,因为1 – bob
@bob如果您正在尝试读取Report.txt的内容,那么您需要使用USEBACKQ选项,因为您的文件名在引号。 – Squashman
或者,您可以从文件名中删除引号。 – 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!
看起来好像更容易将FOR变量更改为小写,而不是更改所有SET语句;) – Squashman
也可以更容易地接受我的答案而不是写这是因为它们几乎完全相同。 – SomethingDark
谢谢你们的帮助,并且花时间解释这一切。我对批量编程非常陌生,但从所有这些帖子中学习。欣赏它。 – bob
如果你想在REPORT.TXT的内容阅读,那么你需要,因为你必须在文件名括起来使用usebackq选项。 – Squashman
或者,您可以简单地从文件名中删除引号。 – SomethingDark
Doh !!!!区分大小写FOR变量。 – Squashman