我试图使用.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
但这也没有得到理想的结果。有什么建议?
这里有一些示例命令可以帮助您。
没有延迟扩张:
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
好吧,我找到了有用的东西。
set d=%%~B
set e=!d!
set e=!e: =!
set desiredcommand=command !e!
!desiredcommand!
我还在学习批处理脚本的语法等等,所以我不熟悉使用%和!之间的区别。当我一直看到它时,包围变量。谢谢大家的帮助和建议。