【问题标题】: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 变量批量区分大小写!

标签: batch-file


【解决方案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 相同的输出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
相关资源
最近更新 更多