Mem-nolkan file dari baris perintah

3

Apakah ada perintah bawaan pada Windows 7 atau lebih tinggi untuk mengisi file dengan nol / NULL byte ?

Pemrosesan harus terjadi di tempat (yaitu harus memodifikasi sektor disk / byte file yang sebenarnya), dan tidak membuat file baru.

Sesuatu seperti:

zero c:\temp\*.*

atau

zero hello.bin

itu akan melakukan ini:

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

Jika tidak ada bawaan untuk ini, solusi apa yang ada? Atau haruskah saya melakukannya di C?

Basj
sumber
Bisakah Anda menjelaskan mengapa Anda menginginkan 500 MB 00 00, vs. FF FFatau menghapus file dengan aman?
Peniru Twisty
@TwistyImpersonator Saat menggunakan alat hapus yang aman, kami tidak dapat memastikan bahwa itu telah di-zeroed sebelum dihapus dengan wxHexEditor karena file tidak ada lagi (atau kita perlu mengingat sektor pada disk dan membuka seluruh disk dengan wxHexEditor). Jika file hanya memusatkan perhatian dan tidak dihapus, kita dapat membuka dan melihatnya dan memeriksa.
Basj
1
Saya tidak begitu yakin ini benar-benar aman. Misalnya, metode ini tidak terdengar seperti akan menghapus data file yang disimpan dalam MFT dengan aman.
Peniru Twisty

Jawaban:

5

Apakah ada perintah bawaan di Windows untuk mengisi file dengan nol / NULL byte?

Iya. Anda dapat menggunakan fsutilini:

> 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

Untuk mengisi nol file lengkap, Anda harus menggunakan offset 0dan Anda perlu mengetahui panjang file.


Bisakah kita menggunakan file batch yang akan menghitung ukuran secara otomatis?

Tentu saja.

Gunakan file batch berikut (zero.cmd):

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

Pemakaian:

  • Anda bisa memberikan nama file tunggal sebagai argumen: zero test.txtatau wildcard:zero *.txt

Contoh:

> type test.txt
abc
foo$
foo
bar

> zero test.txt
Zero data is changed

> type test.txt

>

masukkan deskripsi gambar di sini


Bacaan lebih lanjut

DavidPostill
sumber
Terima kasih. Bisakah kita melakukan batch yang akan berfungsi seperti ini zero myfile.binyaitu yang akan menghitung ukuran secara otomatis?
Basj
Terima kasih @ DavidPostill, dengan batch itu luar biasa, karena ia menerima wildcard *.txt! Suatu hal kecil (bukan masalah besar jika tidak mungkin dengan mudah, hanya bertanya seandainya itu mungkin dengan hanya satu atau dua baris dalam batch): apakah ini akan bekerja secara rekursif untuk semua file dalam subfolder? Seperti zero -r c:\temp\ akan nol semua file dalam folder ini atau dalam subfoldernya.
Basj
... Dan yang terakhir: apakah fsutil setzerodatabenar - benar 100% aman? yaitu tidak ada risiko mengalokasikan sektor baru pada disk untuk menulis nol byte, dan meninggalkan data sebelumnya masih di suatu tempat di disk? ;) Apakah didokumentasikan bahwa ia menggantikan nol byte di tempat ?
Basj
@ Basj Saya tidak tahu apakah itu benar-benar aman :)
DavidPostill
@ Basj zero -r c:\tempbisa dilakukan, tetapi akan membutuhkan file batch yang lebih rumit (parameter parsing dll). Itu bukan sesuatu yang saya ingin habiskan waktu untuk memperbaikinya.
DavidPostill