为啥没有设置变量
Posted
技术标签:
【中文标题】为啥没有设置变量【英文标题】:Why variables are not set为什么没有设置变量 【发布时间】:2016-04-06 12:30:26 【问题描述】:我有一个文件 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%
【问题讨论】:
如果您尝试读取 Report.txt 的内容,那么您需要使用 USEBACKQ 选项,因为您的文件名包含在引号中。 或者,您可以简单地从文件名中删除引号。 哇!!!!区分大小写的 FOR 变量。 当然! one time 变量批量区分大小写! 【参考方案1】: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 语句会更容易。 ;) 也更容易接受我的答案而不是写这个,因为它们实际上是相同的。 感谢你们的帮助并花时间解释这一切。我对批处理编程很陌生,但从所有这些帖子中学习。欣赏它。【参考方案2】:您已启用延迟扩展,但您没有使用它。为了使用延迟扩展,您需要使用!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 如果您尝试读取 Report.txt 的内容,那么您需要使用 USEBACKQ 选项,因为文件名包含在引号中。 或者,您可以删除文件名中的引号。 感谢您的宝贵时间。我尝试删除引号和 for /F "USEBACKQ tokens=1-4 delims=," %%A in ("Report.txt") 做(但都没有工作。删除引号会使代码挂起并添加USEBACKQ 给出与 %a 而不是 1 相同的输出以上是关于为啥没有设置变量的主要内容,如果未能解决你的问题,请参考以下文章
我已经设置了 CPUPROFILE 环境变量并链接了 -lprofiler。为啥 gperftools 没有启动分析器?