Удалить пробелы из SHA1 в цикле FOR? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь распечатать каждый из хэшей SHA1 для всех исполняемых файлов в данном каталоге, используя файл .bat.Я планирую запустить команду, отличную от 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

Но это также не дает желаемого результата.Есть предложения?

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Вот несколько примеров команд, которые могут вам помочь.

Без отложенного расширения:

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 голосов
/ 12 марта 2019

Ну, я нашел что-то, что работает.

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

Я все еще изучаю синтаксис и многое другое в пакетном сценарии, поэтому я не знаю, в чем разница между использованием% и! чтобы окружить переменную, когда я продолжаю видеть это в обоих направлениях. Спасибо всем за помощь и советы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...