for / f:使用各种分隔符读取输入

时间:2016-11-17 18:42:18

标签: batch-file variables for-loop text-files

我正在使用GPG(或7-Zip)来生成文件的哈希值。我想将这些哈希值读取到批处理文件中的变量,以便进一步使用它们。

我的问题是GPG根据路径长度创建了 - 并选择了hashalgo-不同的输出:

SHA256,短路径:

c:\test.txt: E3B0C442 98FC1C14 9AFBF4C8 996FB924 27AE41E4 649B934C A495991B
         7852B855

MD5,短路径:

c:\test.txt: D4 1D 8C D9 8F 00 B2 04  E9 80 09 98 EC F8 42 7E

SHA256,长路径:

C:\Folder1\Folder2\Folder3\Testfile-longname.ext1.txt: 
764B2054 853B6BCC 919853DD D47F4A3A F5A2DFB1 A5EE6967 52051E1E 12B143CC

当使用CRC32和SHA256作为文件时,7-zip提供以下输出:

7-Zip (a) [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04
Scanning
1 file, 296533469 bytes (283 MiB)
CRC32    SHA256                                                           Size           Name
-------- ---------------------------------------------------------------- -------------  ------------
BB280EC2 22B8AB1B1AD2F04A47BFD409997A834B30C617B619522381123B7D2AD8F724F9 123456789      Testfile-longname.ext1.txt
-------- ---------------------------------------------------------------- -------------  ------------
BB280EC2 22B8AB1B1AD2F04A47BFD409997A834B30C617B619522381123B7D2AD8F724F9     296533469  
Size: 123456789
CRC32  for data:              BB280EC2
SHA256 for data:              22B8AB1B1AD2F04A47BFD409997A834B30C617B619522381123B7D2AD8F724F9

不幸的是我无法对路径长度和hashalgo进行任何预测,但我可以说使用了哪个程序(GPG或7-zip)。

我在for / f的delim和tokens中尝试了各种设置但是在7-zip输出中无法在GPG输出和CRC32(以及可能是SHA256)中可靠地捕获MD5和SHA256。

感谢您的帮助!

澄清: 使用GPG我有不同输出格式的问题,我无法得到校验和。 当使用7-ZIP时,我可以从输出的大(不重要)部分中提取校验和。

1 个答案:

答案 0 :(得分:1)

有关您提供的输出示例,请尝试以下操作:

for /f "tokens=1,2,3,4 delims=: " %a in ('type foobar.txt ^| findstr "data"') do echo %d

其中foobar.txt包含命令的输出,您可以使用命令替换类型foobar.txt。