Ridimensiona un file nel prompt dei comandi?


14

Come ridimensiono un file dal prompt dei comandi (o in un file batch)?

  • Ha bisogno di trattare il file come binario . Il formato del file è irrilevante e arbitrario.

  • Estendere il file dovrebbe riempirlo di zeri.

  • La riduzione del file dovrebbe troncare il file.

In altre parole:

Come si duplica la funzionalità di SetEndOfFile nel prompt dei comandi?


Potresti provare diskpart .
jpaugh

Risposte:


10

Non credo che la funzionalità esista nativamente nella shell DOS, ho il sospetto che sia necessario utilizzare un altro programma per portare a termine il lavoro. Ecco alcune possibilità:

  1. C'è uno strumento chiamato trunc che afferma di fare esattamente quello che stai cercando:

    Trunc è un'app di riga di comando di Windows per troncare i file a una dimensione specificata. Utilizzabile anche per ingrandire un file.

    Dovrai provarlo per scoprire esattamente come il file viene riempito (ad esempio con zeri o spazzatura), ma in caso contrario questo sembra adattarsi al disegno di quello che stai chiedendo.

  2. fsutil è uno strumento di sistema di Windows XP e di sopra che sembra avere alcune funzionalità che potrebbero aiutare. Specificamente il fsutil file il sottocomando sembra essere in grado di creare, impostare la lunghezza e anche i file di riempimento zero.

    In particolare:

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

    Creerà un file a 1024 byte senza riempimento, ma non riesco a vedere un modo per troncare il file. Esiste un comando che imposta la lunghezza dei dati valida, ma non sembra che modifichi l'indicatore EOF come:

    Utilizzando setvaliddata

    In NTFS, ci sono due importanti concetti di lunghezza del file: il marcatore Fine del file (EOF) e la lunghezza dei dati validi (VDL). L'EOF indica la lunghezza effettiva del file. Il VDL identifica la lunghezza dei dati validi sul disco. Qualsiasi lettura tra VDL ed EOF restituisce automaticamente 0 per preservare il requisito di riutilizzo degli oggetti C2.

  3. UVHD è un editor esadecimale che sembra avere le funzioni che stai richiedendo. L'unico problema è che funziona solo con Windows / SFU (Services for Unix) e non con DOS. Ciò che in realtà significa per un utente finale non lo so, ma ho il vago sospetto che SFU sia stato abbandonato in Vista e Win 7.


1
Ah ok. Grazie, trunc fa quello di cui ho bisogno. Oh, e una nota: SFU (o meglio, SUA - "Sottosistema per applicazioni basate su Unix", alias Interix) non è stato rilasciato in Windows 7; è solo ora un opzionale componente nella versione Ultimate, sfortunatamente. : \
Mehrdad

Ah, abbastanza onesto, non ho potuto trovare molto in termini di informazioni su SUA / SFU anche se ad essere sincero non ho guardato troppo da vicino. Ho anche trovato un altro modo per creare file di lunghezza arbitraria usando fsutil e ho modificato la mia risposta, ma come ho notato non riesco a vedere un modo valido per troncare i file.
Mokubai

A proposito, ho pensato di far notare qualcosa: credo che la lunghezza dei dati valida sia la virtuale lunghezza del file sul disco, non il fisico lunghezza. Se il file è compresso, ad esempio, potrebbe essere effettivamente più piccolo - avresti bisogno della dimensione compressa del file.
Mehrdad

5
copy /Y nul: file.txt

Per impostazione solo 0 byte, ovviamente.


2
Questo davvero non sembra rispondere alla domanda.
Manishearth

+1 Sono d'accordo sul fatto che non è la risposta giusta ma è esattamente ciò che sono venuto qui a cercare - come troncare un file dalla riga di comando di Windows.
Dan Atkinson

2

Se hai installato GnuWin32, puoi usarlo dd per farlo.

dd if=nul of=/the/file/to/truncate bs=1 count=0 seek=the_file_size oflag=append

Il potenziale dd non smette mai di stupirmi, comando funziona ma senza if = null.
too

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.