Изменить размер файла в командной строке?

14

Как изменить размер файла из командной строки (или в пакетном файле)?

  • Он должен обрабатывать файл как двоичный файл . Формат файла не имеет значения и является произвольным.

  • Расширение файла должно дополнить его нулями.

  • Сжатие файла должно усечь файл.

Другими словами:

Как вы дублируете функциональность SetEndOfFileв командной строке?

user541686
источник
Вы можете попробовать diskpart .
jpaugh

Ответы:

10

Я не верю, что функциональность существует в оболочке DOS, я подозреваю, что вам нужно использовать другую программу, чтобы выполнить работу. Вот несколько возможностей:

  1. Существует инструмент под названием Trunc, который утверждает, что делает именно то, что вам нужно:

    Trunc - это приложение командной строки Windows для усечения файлов до указанного размера. Также можно увеличить файл.

    Вам нужно будет попробовать это, чтобы выяснить, как именно файл дополняется (например, с нулями или мусором), но в противном случае это, кажется, соответствует требованиям того, о чем вы просите.

  2. fsutil - системный инструмент для Windows XP и более поздних версий, обладающий некоторыми функциональными возможностями, которые могут помочь. В частности, fsutil fileкажется, что подкоманда может создавать, устанавливать длину, а также заполнять нулями файлы.

    В частности:

    fsutil file createnew "C:\temp\myfile" 1024

    Создает заполненный нулями файл размером 1024 байта, но я не вижу способа усечь файл. Есть команда, которая устанавливает допустимую длину данных, но она не изменяет маркер EOF как:

    Использование setvaliddata

    В NTFS существует два важных понятия длины файла: маркер конца файла (EOF) и допустимая длина данных (VDL). EOF указывает фактическую длину файла. VDL определяет длину допустимых данных на диске. Любые операции чтения между VDL и EOF автоматически возвращают 0, чтобы сохранить требование повторного использования объекта C2.

  3. UVHD - это шестнадцатеричный редактор, который, кажется, имеет функции, которые вы запрашиваете. Единственная проблема заключается в том, что он работает только под Windows / SFU (Services for Unix), а не под DOS. Что это на самом деле означает для конечного пользователя, я на самом деле не знаю, но у меня есть смутное подозрение, что SFU был отброшен в Vista и Win 7.

Мокубай
источник
1
Ах хорошо. Спасибо, truncделает то , что мне нужно. Да, и примечание: SFU (или, скорее, SUA - «Подсистема для приложений на основе Unix», иначе Interix) не был удален в Windows 7; К сожалению, это просто дополнительный компонент в окончательной версии. : \
user541686
Ах, честно говоря, я не мог найти много информации о SUA / SFU, хотя, честно говоря, я не слишком внимательно присматривался. Я также нашел другой способ создания файлов произвольной длины, используя fsutilи отредактировав мой ответ, но, как я заметил, я не вижу правильного способа усечения файлов.
Мокубай
Кстати, я решил кое-что указать: я считаю, что действительная длина данных - это виртуальная длина файла на диске, а не физическая длина. Например, если файл сжат, он может быть меньше - вам понадобится сжатый размер файла.
user541686
5
copy /Y nul: file.txt

Конечно, для установки только на 0 байтов.

KipB7
источник
2
Это действительно не похоже на ответ на вопрос.
Manishearth
+1 Я согласен, что это не правильный ответ, но это именно то, что я искал здесь - как обрезать файл из командной строки Windows.
Дэн Аткинсон
2

Если у вас установлен GnuWin32, вы можете использовать его ddдля этого.

dd if=nul of=/the/file/to/truncate bs=1 count=0 seek=the_file_size oflag=append
я могу сделать
источник
Потенциал dd не перестает меня удивлять, команда работает, но без if = nul.
тоже