5

У меня есть ~ 300 файлов, которые должны быть усечены (мне нужно удалить указанное количество байтов из начала файла). Я могу сделать это один за другим, используя редактор шестнадцатеричных файлов, но учитывая количество файлов, которые мне нужно обработать, это будет довольно трудоемкой задачей.

Есть ли автоматизированное решение для этого? (Операционная система Windows 7 64bit.)

2 ответа2

5

dd есть опция пропуска.

Для каждого файла Вы можете использовать dd if=MyFile of=my_new_file skip=BytesToSkip

Необязательно в цикле (например, в bash в целевой директории)
for a in * ; do echo processing $a ; dd if=$a of=$a.shorter skip=300 ; done

Настройте пропуск с правильным количеством байтов, КБ или МБ
Если файлы большие, воспроизведение с размером блока (bs = X) может ускорить процесс.

2

Ну вот...

Код Powershell:

$PATH = "d:\My Dir"
$BYTES_TO_TRIM = 10

$files = dir $PATH | where { !$_.PsIsContainer }

foreach ($file in $files) {
    Write-Output "File being truncated: $($file.FullName)"
    Write-Output "  Original Size: $($file.Length) bytes"
    Write-Output "  Truncating $BYTES_TO_TRIM bytes..."
    $byteEncodedContent = [System.IO.File]::ReadAllBytes($file.FullName)
    $truncatedByteEncodedContent = $byteEncodedContent[$BYTES_TO_TRIM..($byteEncodedContent.Length - 1)]
    Set-Content -value $truncatedByteEncodedContent -encoding byte -path "$($file.FullName)"

    Write-Output "  Size after truncation: $((Get-Item $file.FullName).Length) bytes"
    Write-Output "Truncation done!`n"
}

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