1

Мне нужен пакетный скрипт, чтобы переименовать все файлы в папке, их строчные эквиваленты, с их хешем SHA1, добавленным в конце после подчеркивания.

Пример:

У меня есть файл с именем: "Windows8.1-KB2862152-x86.cab", его хеш-код является "bc44b5c4daca0fb2a7b596bafb3d751231983c0e", поэтому мне нужно переименовать его в: windows8.1-kb2862152-x86_bc44b5b2b3bb5 в нижнем регистре.

У меня есть огромное количество этих файлов, которые мне нужны в этом формате.

Я должен также упомянуть, что у меня есть инструмент SHA1 из IBM Endpoint Manager(sha1.exe), который используется следующим образом:

sha1 [-r|-s|-m|-b] <filename> [-c]

-r: Calculate Size/Sha1 and print out a prefetch style statement for 6.0+ style downloads (use this normally).
-s: Sha1 only.
-m: Sha1 in MIME format (hex-encoded and base-64).
-b: Calculate Size/sha1 and print out a prefetch block statment for 7.2+ style downloads.
-c: Puts the result string into you paste buffer so you don't need to copy/paste out of the command window.

У меня есть следующий скрипт, который я нашел на этом сайте, но получаю "Синтаксис команды неверен"

@ECHO OFF
SET FULLNAME=%~f1
for /f "delims=" %%a in ('sha1.exe -s %FULLNAME%') do SET hash=%%a
ren %FULLNAME% %FULLNAME%_%hash%

очевидно, он вызывается: для% A IN (C:\PathToFolder *) DO C:\SomeFolder\hasher.bat "% A", однако это также не поможет при переименовании в нижнем регистре, и я думаю, что оно потеряло бы расширение файла ,

1 ответ1

0

Ваш скрипт должен работать нормально, если вы передаете имя файла в качестве аргумента. Например, сохраните его как hash.bat и запустите hash.bat Windows8.1-KB2862152-x86.cab из командной строки.

Этот сценарий переименует файл в Windows8.1-KB2862152-x86.cab_bc44b5c4daca0fb2a7b596bafb3d751231983c0e

Если я правильно понимаю, вы хотите расширение .cab в конце, и вы хотите, чтобы имя файла было в нижнем регистре.

Чтобы исправить часть .cab, используйте замену. Измените последнюю строку в вашем скрипте с:

ren %FULLNAME% %FULLNAME%_%hash%

в

ren %FULLNAME% %FULLNAME:.cab=%_%hash%.cab

Теперь добавьте еще одну строку, чтобы переименовать все файлы в нижний регистр. dir /l перечисляет вывод в нижнем регистре, поэтому перечислите все файлы и переименуйте их в соответствии с выводом:

for /f "tokens=*" %%a in ('dir /l /b /s /a-d') do ren "%%a" "%%a"

Итак, ваш скрипт должен быть:

@ECHO OFF
SET FULLNAME=%~f1
for /f "delims=" %%a in ('sha1.exe -s %FULLNAME%') do SET hash=%%a
ren %FULLNAME% %FULLNAME:.cab=%_%hash%.cab
for /f "tokens=*" %%a in ('dir /l /b /s /a-d') do ren "%%a" "%%a"

Вам нужно будет изменить сценарий для вашего рабочего каталога или запустить сценарий из того же каталога, где хранятся ваши CAB-файлы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .