我的批处理技能有限。为了生成许多文件的结果,我使用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