【问题标题】:Remove spaces from SHA1 within a FOR loop?在 FOR 循环中从 SHA1 中删除空格?
【发布时间】:2019-03-12 18:01:33
【问题描述】:

我正在尝试使用 .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

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

【问题讨论】:

  • 用户@dbenham 在Dostips 上写了一个非常好的哈希脚本。
  • echo %%var 错了,必须写成echo %var%%%Bfor 循环的元变量,而 %var% 是环境变量。无论如何,当您尝试在循环内执行此操作时,它仍然不会返回您想要的 wnat,除非您使用 delayed expansion,所以它会是 echo !var! 然后...

标签: batch-file


【解决方案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

【讨论】:

    【解决方案2】:

    嗯,我发现了一些有用的东西。

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

    我还在学习批处理脚本的语法和其他东西,所以我不熟悉使用 % 和 !当我一直以两种方式看到它时,包围一个变量。谢谢大家的帮助和建议。

    【讨论】:

      猜你喜欢
      • 2013-06-26
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多