Redimensionar um arquivo no prompt de comando?


14

Como redimensiono um arquivo no prompt de comando (ou em um arquivo em lotes)?

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

  • A extensão do arquivo deve preenchê-lo com zeros.

  • Reduzir o arquivo deve truncar o arquivo.

Em outras palavras:

Como você duplica a funcionalidade do SetEndOfFileprompt de comando?


Você pode tentar o diskpart .
jpaugh

Respostas:


10

Não acredito que a funcionalidade exista nativamente no shell do DOS, desconfio 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 é um aplicativo de linha de comando do Windows para truncar arquivos para um tamanho especificado. Também utilizável para ampliar um arquivo.

    Você terá que tentar descobrir exatamente como o arquivo está sendo preenchido (por exemplo, com zeros ou lixo), mas, caso contrário, isso parece se encaixar na conta do que você está pedindo.

  2. O fsutil é uma ferramenta do sistema Windows XP e superior que parece ter algumas funcionalidades que podem ajudar. Especificamente, o fsutil filesubcomando parece capaz de criar, definir comprimento e também zero arquivos de preenchimento.

    Especificamente:

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

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

    Usando setvaliddata

    No NTFS, existem dois conceitos importantes de tamanho do arquivo: o marcador Fim do arquivo (EOF) e o Comprimento válido dos dados (VDL). O EOF indica o tamanho real do arquivo. A VDL identifica o comprimento dos dados válidos no disco. Quaisquer leituras entre VDL e EOF retornam automaticamente 0 para preservar o requisito de reutilização do objeto C2.

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


1
Ah ok. Obrigado, truncfaz o que eu preciso. Ah, e uma observação: o SFU (ou melhor, SUA - "Subsistema para aplicativos baseados em Unix", também conhecido como Interix) não foi descartado no Windows 7; agora é um componente opcional na versão Ultimate, infelizmente. : \
user541686

Ah, é justo, eu não consegui encontrar muita informação sobre SUA / SFU, para ser sincero, não olhei muito de perto. Também encontrei outra maneira de criar arquivos de tamanho arbitrário usando fsutile editando minha resposta, mas como observei, não vejo uma maneira válida de truncar os arquivos.
Mokubai

A propósito, pensei em apontar algo: acredito que o comprimento válido dos dados é o comprimento virtual do arquivo no disco, não o comprimento físico . Se o arquivo estiver compactado, por exemplo, ele poderá ser menor - você precisará do tamanho compactado do arquivo.
user541686

5
copy /Y nul: file.txt

Para definir apenas 0 bytes, é claro.


2
Isso realmente não parece responder à pergunta.
Manishearth

+1 Concordo que não é a resposta certa, mas é exatamente o que eu vim procurar aqui - como truncar um arquivo na linha de comando do Windows.
Dan Atkinson

2

Se você tiver o GnuWin32 instalado, poderá usá dd-lo.

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

O potencial dd nunca deixa de me surpreender, o comando funciona, mas sem if = nul.
também

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.