Nullen einer Datei über die Befehlszeile

971
Basj

Gibt es in Windows 7 oder höher einen integrierten Befehl, um eine Datei mit null / null Bytes zu füllen ?

Die Verarbeitung sollte an Ort und Stelle erfolgen (dh sie sollte die tatsächlichen Plattensektoren / -bytes der Datei ändern) und keine neue Datei erstellen.

So etwas wie:

zero c:\temp\*.* 

oder

zero hello.bin 

das würde das tun:

Before: hello.bin (500 MB) 5D 1A CB FF FF C0 ... AA CD 0F FF   After: hello.bin (500 MB) 00 00 00 00 00 00 ... 00 00 00 00 

Wenn dafür nichts eingebaut ist, welche anderen Lösungen gibt es? Oder müsste ich es in C machen?

2
Können Sie ein wenig Licht auf 500 MB "00 00" vs. "FF FF" werfen oder die Datei sicher löschen? Twisty Impersonator vor 6 Jahren 0
@TwistyImpersonator Wenn Sie ein sicheres Löschwerkzeug verwenden, können wir vor dem Löschen mit wxHexEditor nicht überprüfen, ob es auf null gesetzt wurde, da die Datei nicht mehr vorhanden ist (oder wir müssen uns den Sektor auf der Festplatte merken und die gesamte Festplatte mit wxHexEditor öffnen). Wenn die Datei nur auf Null gesetzt und nicht gelöscht wird, können wir sie öffnen, anzeigen und überprüfen. Basj vor 6 Jahren 0
Ich bin mir nicht sicher, ob das wirklich sicher ist. Zum Beispiel klingt diese Methode nicht so, als würde sie alle Daten der Datei, die in der MFT gespeichert sind, sicher löschen. Twisty Impersonator vor 6 Jahren 1

1 Antwort auf die Frage

5
DavidPostill

Gibt es in Windows einen integrierten Befehl zum Befüllen einer Datei mit Null- / NULL-Bytes?

Ja. Sie können dafür verwenden fsutil:

> fsutil file setzerodata /? Usage : fsutil file setzerodata offset=<val> length=<val> <filename> offset : File offset, the start of the range to set to zeroes length : Byte length of the zeroed range Eg : fsutil file setzerodata offset=100 length=150 C:\Temp\sample.txt 

Um eine vollständige Datei mit Nullen zu füllen, müssen Sie einen Versatz von verwenden 0und die Dateilänge kennen.


Können wir eine Batchdatei verwenden, die die Größe automatisch berechnet?

Na sicher.

Verwenden Sie die folgende Batchdatei (zero.cmd):

@echo off setlocal enabledelayedexpansion for %%a in (%1) do ( fsutil file setzerodata offset=0 length=%%~za %%a ) endlocal 

Verwendungszweck:

  • Sie können einen einzelnen Dateinamen als Argument angeben: zero test.txtoder einen Platzhalter:zero *.txt

Beispiel:

> type test.txt abc foo$ foo bar  > zero test.txt Zero data is changed  > type test.txt  > 

enter image description here


Lesen Sie weiter

Vielen Dank. Können wir einen Batch ausführen, der so funktioniert wie "zero myfile.bin", dh die Größe würde automatisch berechnet? Basj vor 6 Jahren 0
Danke @DavidPostill, mit dem Stapel ist es wunderbar, da er Wildcards `* .txt` akzeptiert! Eine kleine Sache (keine große Sache, wenn nicht leicht möglich, nur fragen, falls es möglich ist, mit nur ein oder zwei weiteren Zeilen im Stapel): Würde es auch für alle Dateien in Unterordnern rekursiv funktionieren? Wie 'zero -rc: \ temp \ `würden alle Dateien in diesem Ordner oder in seinen Unterordnern auf Null gesetzt. Basj vor 6 Jahren 0
... Und eine letzte: Ist `fsutil setzerodata` wirklich 100% sicher? dh besteht nicht das Risiko, dass * neue Sektoren * auf der Festplatte * zugewiesen werden, um die Null-Byte zu schreiben und die vorherigen Daten noch auf der Festplatte zu belassen? ;) Ist dokumentiert, dass er durch null Bytes ** an Ort und Stelle ** ersetzt wird? Basj vor 6 Jahren 0
@Basj Ich habe keine Ahnung, ob es absolut sicher ist :) DavidPostill vor 6 Jahren 0
@Basj `zero -rc: \ temp` könnte ausgeführt werden, würde jedoch eine kompliziertere Batchdatei erfordern (Analyseparameter usw.). Ich möchte nicht die Zeit dafür aufwenden, um es richtig zu machen. DavidPostill vor 6 Jahren 0
Vielen Dank für Ihre Antwort @DavidPostill. Es ist bereits jetzt perfekt (ich habe gerade gefragt, ob das Unterverzeichnis rekursiv mit ein paar weiteren Zeichen im Stapel hinzugefügt werden könnte, z. B. das Hinzufügen eines Flag "-r" in der `for'-Schleife, aber da dies nicht möglich ist , keine Notwendigkeit mehr Zeit damit zu verbringen, es ist schon gut!) Basj vor 6 Jahren 0