在一个文本行上输出文件名 + CRC32 的简单批处理方法

在一个文本行上输出文件名 + CRC32 的简单批处理方法

我的批处理技能有限。为了生成许多文件的结果,我使用DIR /a-d /s /b > dirlist.txt。我将 dirlist.txt 导入 Excel(A 列),并使用它来生成逐个文件命令(B 列),然后我可以将其复制到批处理文件中。这比循环更麻烦,但至少我理解它。

目前的情况需要进行 CRC32 计算。我有一个命令行工具,它只表示 CRC32 值,而不表示相应的文件名。因此,我的 Excel 解决方案先输出文件名(即ECHO D:\[full path].ext >> output.txt),然后再计算 CRC32 值(即,与符号 ( &) 后跟CRC32.exe "D:\[full path].ext" >> output.txt)。换句话说,电子表格会生成一个命令,先说明文件名,然后说明 CRC32 值。

不幸的是,这会将文件名放在 output.txt 中的一行上,然后将 CRC32 值放在下一行。我认为可以将两者放在同一行上,但这种情况似乎比我在教程中看到的简单示例更复杂。所以问题是,有没有一种相对简单的方法可以在一行输出中声明文件名和 CRC32 值?

答案1

如果您不完全反对完整的批量解决方案,那么这应该适合您:

@echo off

set "list=dirlist.txt"
set "out=output.txt"

dir /a-d /s /b > %list%

setlocal enabledelayedexpansion
for /f "tokens=*" %%A in (%list%) do (
    set "path=%%A"
    for /f %%B in ('CRC32.exe "!path!"') do (
        set "calc=%%B"
        echo !path! + !calc! >> %out%
    )
)

dirlist.txt我们为和设置了一个变量,output.txt以便更轻松地更新具有固定路径的变量(如果您愿意),并且您的DIR命令保持不变。对于循环,我们setlocal enabledelayedexpansion可以使用循环内变量;我们的初始循环查看token=*您的每一行()dirlist.txt并将其分配给参数%%A,我们将其设置为path变量。接下来,我们有嵌套循环,它CRC32.exe以我们的!path!变量作为参数执行并将输出分配给参数%%B,然后将其设置为calc变量。最后,我们可以在的同一行上回显!path!和。在上面的例子中,我用一个(基于您问题的标题)将它们分开,但您可以使用任何您想要的,或者什么都不用 - 只要记住您可能需要用一个特殊字符来转义 。 我想指出我没有CRC32.exe,所以for循环中命令的语法是基于我对你的问题的理解。希望这有帮助!!calc!output.txt+^

答案2

对于目录及其子目录中的所有文件,使用 crc32.exe 计算它们的哈希值/校验和,并将完全限定路径名和同一行上的哈希值输出到文本文件。

下载crc32工具并将其放入您的 Windows 文件夹中。

@echo off
setlocal enableextensions
cd.> dirlist.txt
for /F "eol=| tokens=* delims=" %%g in ('dir *.* /S /A-D /B 2^>nul') do (
for /F %%h in ('%systemroot%\crc32.exe "%%g"') do (
echo %%g + %%h >> dirlist.txt
)
)
exit 
rem 

相关内容