【问题标题】:Batch file - null variable values in loop [duplicate]批处理文件-循环中的空变量值[重复]
【发布时间】:2020-08-12 07:51:31
【问题描述】:

我正在编写一个批处理文件,它遍历整个目录(包括所有子目录)并将找到的每个文件的校验和打印到 checksum.txt 文本文件中。

似乎我用粗体表示的两个 ECHO 语句都返回了变量 count 和 var 的空值。最终这意味着生成的 checksum.txt 文件是空的。

setlocal ENABLEDELAYEDEXPANSION

For /R "C:\Users\MyName\Desktop\SourceDir" %%G in (*) do (
SET /A count=1
    FOR /F "tokens=* USEBACKQ" %%F IN (`certutil -hashfile "%%G" sha256`) DO (
            SET var!count!=%%F
            SET /A count=!count!+1

echo ****************************************** %count% %var1%
        )
echo ****************************************** %var1%
SET FILECHECKSUM=%var1% %var2%

>>"CHECKSUM.TXT" echo(%FILECHECKSUM%

)

timeout /t -1

【问题讨论】:

  • 你似乎知道delayed expansion,所以你为什么不使用它呢?
  • SET /A count=!count!+1 --> set/a"count+=1"
  • 我建议使用>>"CHECKSUM.TXT ( for ... do ( for ... do ( ... ... ) ) ),因为它只打开一次文件。在您的代码中,文件在每次 for 迭代中打开和关闭。这将加快执行速度,特别是在有很多文件要解析的情况下。

标签: batch-file variables


【解决方案1】:

感谢 Stephan、HackingAddict1337 和 Squashman。

我现在已经设法使用下面的代码让它工作了。

setlocal ENABLEDELAYEDEXPANSION

For /R "C:\Users\MyName\Desktop\SourceDir" %%G in (*) do (
SET /A count=1
    FOR /F "tokens=* USEBACKQ" %%F IN (`certutil -hashfile "%%G" sha256`) DO (
            SET var!count!=%%F
            SET /a count=!count!+1
echo xxxxxxxxxxxxxxx !count! !var1!
        )

SET FILECHECKSUM=!var1! , !var2!

>>"CHECKSUM.csv" echo(!FILECHECKSUM!

)


timeout /t -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多