-1

У меня есть 3 RAR-файла (все с тем же md5), и я использую этот код для изменения Md5:

@echo off
setlocal enabledelayedexpansion
 set /A Counter=0


FOR %%1 in (*.rar) do (

        set /A Counter= !Counter! + 1
                COPY  %%1+!Counter!
                echo !Counter!

)

pause

Когда я запускаю файл .bat, он показывает 3 строки со значением: 1, 2, 3, но когда я проверяю md5 из 3 rar-файлов, они совпадают, хотя и были изменены. Зачем ? Что я не так сделал? Спасибо !

2 ответа2

3

Скорее всего, файлы ».\1 ','.\2 'и'.\3 'не существуют. Команда копирования copy archive.rar+1 добавляет содержимое файла '1' в файл .rar. Если файл не существует, он рассматривается как пустой. Тем не менее, хэш изменяется, поскольку без флага /b команда также добавляет символ 0x1A. Поскольку все файлы, найденные с помощью (* .rar), были одинаковыми для начала, добавление одинаковых байтов к каждому приведет к трем одинаковым файлам .rar с одинаковым MD5.

Вы можете убедиться, что значения MD5 отличаются после запуска скрипта, создав файлы '.\1 ','.\2 'и т.д. С различным содержанием. Если вы просто хотите добавить символы, вы можете использовать что-то вроде echo !Counter! >> %%1 вместо. Полученные файлы больше не будут действительными архивами rar, конечно. Для этого вам понадобится инструмент rar с интерфейсом командной строки.

1

Ваш пакетный скрипт имеет некоторые проблемы. То, что вы пытаетесь сделать, - это добавить число в конец исходных файлов, чтобы изменить их хеши MD5. Тем не мение:

  • Знак плюс (+) можно использовать только для объединения нескольких существующих файлов.
  • Вы имеете дело с двоичными файлами, поэтому вам нужно использовать параметр /b .

    /b указывает интерпретатору команды прочитать количество байтов, указанное размером файла в каталоге. /b является значением по умолчанию для copy , если copy объединяет файлы.

    Когда /b предшествует или следует за списком файлов в командной строке, он применяется ко всем перечисленным файлам, пока копия не встретит /a .

    Источник: копия

По сути, вам нужно сохранить номер, который вы хотите добавить во временный файл, а затем объединить его с исходным архивом .rar . Вот исправленная рабочая версия:

@echo off
setlocal
setlocal enabledelayedexpansion

set tempFile=%temp%\%random%%random%.tmp
set /a counter=0

for %%G in (*.rar) do (
set /a counter += 1
<nul set /p=!counter!>"%tempFile%"
copy /b "%%~G"+"%tempFile%" >nul
echo !counter!
)

del "%tempFile%" 2>nul    
pause

endlocal & exit /b

Примечание. Замените на for for /r если вы хотите рекурсивно сканировать папки.

дальнейшее чтение

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