微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用CMD中的findstr从文件中获取MD5值

我有以下文件内容,我想从第2行中提取MD5散列值。

我怎样才能在Windowsbatch file中做到这一点? 不幸的是使用powerscript不是一个选项。

这里input文件(file.txt)

MD5hashoffile20160613190010_Address f4f855c5cb40767a7227b506f641ceef CertUtil:-hashfilecommandcompletedsuccessfully.

我想使用findstr实用程序,但我使用的正则expression式必须是错误的,因为它没有返回任何东西。

使用util-linux重命名命令

这个版本没有指定目标

Vim:从vim命令运行java会产生错误

我怎样才能模仿与MS-DOS命令curl?

如何从目录中列出最近删除文件

findstr /R "[a-fA-F0-9]{32}" file.txt

我感谢任何build议。

谢谢

更新:

我在答案部分添加了完整的解决scheme。

如果抛出一个错误,如何跳过循环中的迭代?

从命令行更改Windows主机名

在terminal中运行文本文件

在terminal使用curl“if”语句?

如何在Windows中从命令行为* .accdb创build用户DSN?

经过一些试验和错误,我发现了一个解决方案:

findstr /R "^[a-fA-F0-9]*$" file.txt

用完整的解决方案更新答案

SETLOCAL ENABLEDELAYEDEXPANSION SET "FILESIZE=0" SET "RECORDCOUNT=0" SET "MD5HASH=" SET "TEMPHASH=" SET "FILESETREPORT=_UNSET" SET "LINE=0" SET "COLUMNS=TableName|RecordCount|FileSize|filehash" echo "=============================" echo "= Starting FileSize process =" echo "=============================" for %%F in (*.csv) do ( echo "Process A CSV File" for /f "tokens=1,2,3,4 delims=^_" %%A IN ("%%~nF") do ( SET "TABLENAME=%%D" SET "FILESIZE=%%~zF" if "!FILESETREPORT!" == "_UNSET" ( SET "FILESETREPORT=%%A_%%B_%%C_FilesetReport.csv" :: Initialize the headers echo !COLUMNS! > !FILESETREPORT! ) ) echo "Get RecordCount in CSV" if "!TABLENAME!" NEQ "FilesetReport" ( for /f "tokens=*" %%I in ('more +1 %%F ^| find /v /c ""') do SET "RECORDCOUNT=%%I" echo "Generate File MD5 Hash" certUtil -hashfile %%~nxF MD5 > hashfile echo "Get the hash from the file" for /f "skip=1 tokens=*" %%A in (hashfile) do ( SET "TEMPHASH=%%A" :: call :cleanHash if !LINE! == 0 SET "LINE=1" && call :cleanHash ) :: Reset the Line Number SET "LINE=0" echo "Save File Details to FieldsetReport" echo "RecordCount : !RECORDCOUNT!" echo "FileSize : !FILESIZE!" echo "MD5Hash : !MD5HASH!" echo "TableName : !TABLENAME!" SET "OUTPUTLINE=!TABLENAME!|!RECORDCOUNT!|!FILESIZE!|!MD5HASH!" echo !OUTPUTLINE! >> !FILESETREPORT! :: Cleanup del hashfile ) ) echo "File Processing Completed" exit /b 0 :cleanHash echo "Remove all spaces from the MD5 hash" :: for /f "delims=" %%a in ('findstr /R "^[a-fA-F0-9]*$" !TEMPHASH!') do SET TEMPHASH=%%a SET "MD5HASH=!TEMPHASH: =!" echo "********************************************************************" echo !MD5HASH! ENDLOCAL

你最好使用这个:

@echo off for /f "skip=1" %%a in (file.txt) do set "hash=%%a" &goto breakLoop :breakLoop echo %hash% pause

这应该工作,即使另一行也只包含十六进制字符,并具有将md5哈希放在一个变量,可以使用的额外好处。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐