输出每个校验和及其相应的文件名以分隔文本文件中的行

问题描述 投票:0回答:1

我正在尝试输出目录中 600 个 tif 文件的校验和。我希望每一行都显示校验和,后跟其各自的文件名。

例如:

b1039a6f0c4295916a82833f507f5e78 vol1_0001.tif
dd3fb454e8d4912934f7626baf105e36 vol1_0002.tif
etc.

这是我尝试过的:

for %%F in (vol1*.*) do certutil -hashfile "%%F" md5 | find /V "hash" >>temp.txt
for %%a in (vol1*.*) do set filename=%%~nxa
for /f "tokens=* delims=" %%i in (temp.txt) do set hash=%%i
@echo %hash% %filename% >>CheckSum.md5

第一部分工作正常,我得到了一个包含我需要的所有校验和的

.txt
文件。但第二部分不起作用。

我得到的只是目录中最后一个文件的校验和和文件名对,重复了很多次。

在同事的推荐下我也尝试过这个方法,但这也没有用:

@echo off
Set "Folder=C:\Users\Me\desktop\MyFolder"
Set "OutPutFile=%~dp0HashList.md5"
Type nul>"%OutPutFile%"    

SetLocal EnableDelayedExpansion
@for /f "delims=" %%a in ('Dir /S /B /A-D "%Folder%"') do (
@for /f "skip=1 delims=" %%H in ('CertUtil -hashfile "%%~a" md5 ^| find /V      "hash"') do set "Hash=%%H"
    echo %%a, !Hash: =! 
    echo %%a, !Hash: =! >>"%OutPutFile%"
)

我得到了文件名列表,但每个文件名都有完全相同的校验和(对于目录中的最后一个文件)。

for-loop batch-file filenames checksum certutil
1个回答
0
投票

您已经非常接近了,但是将

certutil
重定向到
find /v "hash"
只会返回一行,然后您可以使用
skip=1
跳过这一行。另外,请对
for
循环变量使用大写字母,因为某些小写字母会被解释为变量修饰符。

@echo off
SetLocal EnableDelayedExpansion
set "Folder=C:\Users\Me\desktop\MyFolder"
set "output_file=%~dp0Hashlist.md5"

for /f "delims=" %%A in ('Dir /S /B /A-D "%Folder%"') do (
    for /f "delims=" %%H in ('CertUtil -hashfile "%%~A" md5 ^| find /V "hash"') do set "Hash=%%H"
    echo !Hash: =! %%A
    >>"%output_file%" echo !Hash: =! %%A
)
© www.soinside.com 2019 - 2024. All rights reserved.