在FOR循环中从SHA1中删除空格?

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

我试图使用.bat文件打印出给定目录中所有可执行文件的每个SHA1哈希值。我打算运行一个不同于echo的命令,但我无法删除空格。我希望它运行使用SHA1作为实际命令的属性的给定命令,但我需要删除空格。代码最初将可执行文件名称和SHA1写入csv,但我试图将中间步骤删除。

For /f "delims=" %%A in (
     'dir "%testfolder%\*.exe" /s /b /a-d'
) Do If %%~sA Gtr 0 For /f "delims=" %%B in (
     'certutil -hashfile %%A SHA1 ^|findstr /i ^[0-9a-f][0-9a-f].[0-9a-f][0-9a-f].[0-9a-f][0-9a-f]'
) Do (
     REM I want to print the SHA1 number without the spaces
     Echo %%B
)

我尝试创建第二个变量,以便最后的Do看起来像这样:

Set var=%%B
Set var=%var: =%
Echo %%var

但这也没有得到理想的结果。有什么建议?

batch-file
2个回答
1
投票

这里有一些示例命令可以帮助您。

没有延迟扩张:

For /F "Delims=" %%A In ('Dir/B/S/A-D "%testfolder%\*.exe" 2^>Nul'
)Do If %%~sA Gtr 0 For /F "Delims=" %%B In ('CertUtil -HashFile "%%A" SHA1^
 ^|Find /V ":"') Do Set "SHA1=%%B"&Call Echo(%%SHA1: =%%
Pause

...并且延迟扩展(如果目录中有许多可执行文件,建议使用):

For /F "Delims=" %%A In ('Dir/B/S/A-D "%testfolder%\*.exe" 2^>Nul'
)Do If %%~sA Gtr 0 For /F "Delims=" %%B In ('CertUtil -HashFile "%%A" SHA1^
 ^|Find /V ":"')Do SetLocal EnableDelayedExpansion&Set "SHA1=%%B"^
 &Echo(!SHA1: =!&EndLocal

0
投票

好吧,我找到了有用的东西。

set d=%%~B
set e=!d!
set e=!e: =!
set desiredcommand=command !e!
!desiredcommand!

我还在学习批处理脚本的语法等等,所以我不熟悉使用%和!之间的区别。当我一直看到它时,包围变量。谢谢大家的帮助和建议。

© www.soinside.com 2019 - 2024. All rights reserved.