Größe einer Datei in der Eingabeaufforderung ändern?

14

Wie ändere ich die Größe einer Datei an der Eingabeaufforderung (oder in einer Stapeldatei)?

  • Die Datei muss als binär behandelt werden . Das Dateiformat ist irrelevant und beliebig.

  • Das Erweitern der Datei sollte sie mit Nullen auffüllen.

  • Das Verkleinern der Datei sollte die Datei abschneiden.

Mit anderen Worten:

Wie duplizieren Sie die Funktionalität von SetEndOfFilein der Eingabeaufforderung?

user541686
quelle
Sie könnten Diskpart versuchen .
Jpaugh

Antworten:

10

Ich glaube nicht, dass die Funktionalität nativ in der DOS-Shell vorhanden ist. Ich vermute, Sie müssen ein anderes Programm verwenden, um die Arbeit zu erledigen. Hier sind einige Möglichkeiten:

  1. Es gibt ein Tool namens Trunc, das behauptet, genau das zu tun, wonach Sie suchen :

    Trunc ist eine Windows-Befehlszeilenanwendung zum Abschneiden von Dateien auf eine bestimmte Größe. Kann auch zum Vergrößern einer Datei verwendet werden.

    Sie müssen es ausprobieren, um herauszufinden, wie genau die Datei ausgefüllt wird (z. B. mit Nullen oder Müll), aber ansonsten scheint dies der Rechnung zu entsprechen.

  2. fsutil ist ein Systemtool für Windows XP und höher, das anscheinend über einige Funktionen verfügt, die möglicherweise hilfreich sind. Insbesondere fsutil filescheint der Unterbefehl in der Lage zu sein, Dateien mit Nullfüllung zu erstellen, deren Länge festzulegen und diese zu füllen.

    Speziell:

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

    Erstellt eine mit Nullen gefüllte 1024-Byte-Datei, aber ich kann keine Möglichkeit zum Abschneiden der Datei finden. Es gibt einen Befehl, der die gültige Datenlänge festlegt, den EOF-Marker jedoch nicht wie folgt zu ändern scheint:

    Setvaliddata verwenden

    In NTFS gibt es zwei wichtige Konzepte für die Dateilänge: den EOF-Marker (End of File) und den VDL-Wert (Valid Data Length). Die EOF gibt die tatsächliche Länge der Datei an. Die VDL identifiziert die Länge der gültigen Daten auf der Festplatte. Alle Lesevorgänge zwischen VDL und EOF geben automatisch 0 zurück, um die C2-Objekt-Wiederverwendungsanforderung beizubehalten.

  3. UVHD ist ein Hex-Editor, der die Funktionen zu haben scheint, nach denen Sie fragen. Das einzige Problem ist, dass es nur unter Windows / SFU (Services for Unix) und nicht unter DOS funktioniert. Was das für einen Endbenutzer bedeutet, weiß ich eigentlich nicht, aber ich habe den vagen Verdacht, dass SFU in Vista und Win 7 gelöscht wurde.

Mokubai
quelle
1
Ah okay. Danke, truncmacht was ich brauche. Oh, und ein Hinweis: SFU (oder besser gesagt SUA - "Subsystem für Unix-basierte Anwendungen", auch bekannt als Interix) wurde in Windows 7 nicht entfernt. es ist gerade eine optionale Komponente in der Ultimate-Version, leider. : \
user541686 20.06.11
Ah, fairerweise konnte ich nicht viel an Informationen über SUA / SFU finden, obwohl ich ehrlich gesagt nicht genau hinschaute. Ich habe auch eine andere Möglichkeit gefunden, Dateien mit beliebiger Länge zu erstellen fsutilund meine Antwort zu bearbeiten. Wie ich jedoch festgestellt habe, kann ich keine gültige Möglichkeit zum Abschneiden der Dateien finden.
Mokubai
Übrigens, ich dachte, ich würde darauf hinweisen: Ich glaube, die gültige Datenlänge ist die virtuelle Länge der Datei auf der Festplatte, nicht die physische Länge. Wenn die Datei beispielsweise komprimiert ist, könnte sie tatsächlich kleiner sein - Sie benötigen die komprimierte Größe der Datei.
user541686
5
copy /Y nul: file.txt

Natürlich nur zum Setzen auf 0 Bytes.

KipB7
quelle
2
Dies scheint die Frage wirklich nicht zu beantworten.
Manishearth
+1 Ich bin damit einverstanden, dass dies nicht die richtige Antwort ist, aber genau das, wonach ich hier gesucht habe - wie man eine Datei über die Windows-Befehlszeile abschneidet.
Dan Atkinson
2

Wenn Sie GnuWin32 installiert haben, können ddSie es verwenden.

dd if=nul of=/the/file/to/truncate bs=1 count=0 seek=the_file_size oflag=append
ich kann
quelle
dd potential lässt mich immer wieder staunen, befehl funktioniert aber ohne if = nul.
Auch