1

У меня довольно большая база файлов. Файлы имеют очень разные расширения (.txt, .doc, .ppt и т.д.), Но у каждого из них есть определенная фраза в начале файла, которую необходимо удалить.

Итак, допустим, у меня есть файл randomtext.doc. Глядя на файл в простом текстовом редакторе, файл обычно начинается с:

\D0\CFࡱ\E1\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00>\00\00\FE\FF                           \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00K\00\00\00\00\00\00\00\00\00\00M\00\00\00\00\00\00\FE\FF\FF\FF\00\00\00\00J\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\

Но мой файл начинается с:

MYPHRASE \D0\CFࡱ\E1\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00>\00\00\FE\FF  \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00K\00\00\00\00\00\00\00\00\00\00M\00\00\00\00\00\00\FE\FF\FF\FF\00\00\00\00J\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\

Удаление фразы в обычном текстовом редакторе приводит к повреждению файла (например, этот файл, который обычно представляет собой файл .doc, не будет доступен для просмотра в Microsoft Word). Мне нужно иметь возможность удалить фразу, но сохранить расширение файла и т.д.

1 ответ1

1

Это может быть достигнуто несколькими способами. Например, утилита поиска и замены, поддерживающая двоичные файлы, может использоваться для замены "MYPHRASE" пустой строкой. Есть также шестнадцатеричные редакторы, которые могут быть написаны для этого.

Хотя я бы порекомендовал использовать dd для Windows (обязательно скачайте последнюю версию, т.е. dd-0.6beta3.zip).

Следующая команда может использоваться для удаления 9 байтов ("MYPHRASE") из начала файла:

dd bs=9 skip=1 if="Drive:\Path\to\infile.ext" of="Drive:\Path\to\outfile.ext"

Если вы хотите сделать это с большим количеством файлов, поместите их все в один каталог и запустите следующий пакетный файл после редактирования переменных delbytes и rootfolder в соответствии с вашими требованиями:

@echo off
cls
set delbytes=9
set rootfolder="C:\My Files"
for /r %rootfolder% %%a in (*.*) do (
    echo Truncating first %delbytes% bytes of "%%a"
    dd bs=%delbytes% skip=1 if="%%a" of="%%~dpna (Truncated)%%~xa"
    echo.
)

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