Redimensionar um arquivo no prompt de comando?

14

Como redimensiono um arquivo a partir do prompt de comando (ou em um arquivo de lote)?

  • Ele precisa tratar o arquivo como binário . O formato do arquivo é irrelevante e arbitrário.

  • Estender o arquivo deve preenchê-lo com zeros.

  • A redução do arquivo deve truncar o arquivo.

Em outras palavras:

Como você duplica a funcionalidade de SetEndOfFile no prompt de comando?

    
por Mehrdad 19.06.2011 / 21:10

4 respostas

10

Eu não acredito que a funcionalidade exista nativamente no shell do DOS, eu suspeito que você precise usar outro programa para fazer o trabalho. Aqui estão algumas possibilidades:

  1. Existe uma ferramenta chamada Trunc que afirma fazer exatamente o que você procura :

    Trunc is a Windows command-line app to truncate files to a specified size. Also usable to enlarge a file.

    Você terá que experimentá-lo para descobrir exatamente como o arquivo está sendo preenchido (por exemplo, com zeros ou lixo), mas caso contrário, isso parece se encaixar no que você está pedindo.

  2. fsutil é um Windows XP e ferramenta de sistema acima que parece ter alguma funcionalidade que pode ajudar. Especificamente, o subcomando fsutil file parece ser capaz de criar, definir comprimento e também arquivos de preenchimento zero.

    Especificamente:

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

    Será criado um arquivo de 1024 bytes preenchido com zero, mas não consigo ver uma maneira de truncar o arquivo. Existe um comando que define um comprimento de dados válido, mas não parece modificar o marcador de EOF como:

    Using setvaliddata

    In NTFS, there are two important concepts of file length: the End of File (EOF) marker and the Valid Data Length (VDL). The EOF indicates the actual length of the file. The VDL identifies the length of valid data on disk. Any reads between VDL and EOF automatically return 0 in order to preserve the C2 object reuse requirement.

  3. UVHD é um editor hexadecimal que parece ter as funções que você está solicitando. O único problema é que ele só funciona no Windows / SFU (Serviços para Unix) e não no DOS. O que isso realmente significa para um usuário final eu realmente não sei, mas tenho uma vaga suspeita de que o SFU foi descartado no Vista e Win 7.

por 20.06.2011 / 14:20
4
copy /Y nul: file.txt

Para definir apenas 0 bytes, é claro.

    
por 19.12.2012 / 03:11
2

Se você tem o GnuWin32 instalado, então você pode usar dd para fazer isso.

dd if=nul of=/the/file/to/truncate bs=1 count=0 seek=the_file_size oflag=append
    
por 08.02.2013 / 11:58
2

tente meu BSD truncar a compilação para Windows .

EDIT: não está funcionando com arquivos > 2 GB.

Alternativas que funcionam bem com arquivos grandes:

por 08.12.2012 / 01:02