【发布时间】: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