Змінити розмір файлу в командному рядку?


14

Як змінити розмір файлу в командному рядку (або в пакетному файлі)?

  • Потрібно трактувати файл як двійковий . Формат файлу не має значення і довільний.

  • Розширення файлу повинно бути нульовим.

  • Скорочення файлу має усікати файл.

Іншими словами:

Як ви дублюєте функціональність SetEndOfFileу командному рядку?


Ви можете спробувати 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; це просто необов'язковий компонент у версії Ultimate, незручно. : \
user541686

Ах, чесно кажучи, я не міг знайти багато в дорозі інформації про SUA / SFU, хоча, якщо чесно, я не надто уважно придивився. Я також знайшов інший спосіб створити файли довільної довжини, використовуючи fsutilта відредагувавши свою відповідь, але, як я зазначив, я не бачу дійсного способу усічення файлів.
Мокубай

До речі, я думав, що я щось зазначу: я вважаю, що дійсна довжина даних - це віртуальна довжина файлу на диску, а не фізична довжина. Якщо файл, наприклад, стислий, він фактично може бути меншим - вам знадобиться стислий розмір файлу.
користувач541686

5
copy /Y nul: file.txt

Звичайно, якщо встановити лише 0 байт.


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.
теж

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.