¿Cambiar el tamaño de un archivo en el símbolo del sistema?

14

¿Cómo cambio el tamaño de un archivo desde el símbolo del sistema (o en un archivo por lotes)?

  • Necesita tratar el archivo como binario . El formato del archivo es irrelevante y arbitrario.

  • Extender el archivo debe rellenarlo con ceros.

  • Reducir el archivo debería truncar el archivo.

En otras palabras:

¿Cómo se duplica la funcionalidad de SetEndOfFileen el símbolo del sistema?

usuario541686
fuente
Puedes probar diskpart .
jpaugh

Respuestas:

10

No creo que la funcionalidad exista de forma nativa en el shell de DOS, sospecho que necesita usar otro programa para hacer el trabajo. He aquí algunas posibilidades:

  1. Hay una herramienta llamada Trunc que dice hacer exactamente lo que buscas:

    Trunc es una aplicación de línea de comandos de Windows para truncar archivos a un tamaño especificado. También se puede usar para agrandar un archivo.

    Tendrá que probarlo para averiguar exactamente cómo se rellena el archivo (por ejemplo, con ceros o basura), pero de lo contrario, esto parece ajustarse a la factura de lo que está pidiendo.

  2. fsutil es una herramienta del sistema de Windows XP y superior que parece tener alguna funcionalidad que podría ayudar. Específicamente, el fsutil filesubcomando parece ser capaz de crear, establecer la longitud y también archivos de relleno cero.

    Específicamente:

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

    Creará un archivo de 1024 bytes lleno de cero, pero no puedo ver una forma de truncar el archivo. Hay un comando que establece una longitud de datos válida, pero no parece modificar el marcador EOF como:

    Usando setvaliddata

    En NTFS, hay dos conceptos importantes de longitud de archivo: el marcador de Fin de archivo (EOF) y la Longitud de datos válidos (VDL). El EOF indica la longitud real del archivo. El VDL identifica la longitud de los datos válidos en el disco. Cualquier lectura entre VDL y EOF devuelve automáticamente 0 para preservar el requisito de reutilización del objeto C2.

  3. UVHD es un editor hexadecimal que parece tener las funciones que está solicitando. El único problema es que solo funciona en Windows / SFU (Servicios para Unix) y no en DOS. Lo que eso realmente significa para un usuario final no lo sé, pero tengo una vaga sospecha de que SFU se cayó en Vista y Win 7.

Mokubai
fuente
1
Ah bien. Gracias, trunchace lo que necesito. Ah, y una nota: SFU (o más bien, SUA - "Subsistema para aplicaciones basadas en Unix", también conocido como Interix) no se eliminó en Windows 7; ahora es un componente opcional en la versión Ultimate, desafortunadamente. : \
user541686
Ah, bastante justo, no pude encontrar mucha información sobre SUA / SFU, aunque, para ser sincero, no miré demasiado de cerca. También he encontrado otra forma de crear archivos de longitud arbitraria utilizando fsutily editado mi respuesta, pero como noté, no puedo ver una forma válida de truncar los archivos.
Mokubai
Por cierto, pensé en señalar algo: creo que la longitud de datos válida es la longitud virtual del archivo en el disco, no la longitud física . Si el archivo está comprimido, por ejemplo, en realidad podría ser más pequeño; necesitaría el tamaño comprimido del archivo.
user541686
5
copy /Y nul: file.txt

Para configurar solo a 0 bytes, por supuesto.

KipB7
fuente
2
Esto realmente no parece responder la pregunta.
Manishearth
+1 Estoy de acuerdo en que no es la respuesta correcta, pero es exactamente lo que vine a buscar: cómo truncar un archivo desde la línea de comandos de Windows.
Dan Atkinson
2

Si tiene instalado GnuWin32, puede usarlo ddpara hacerlo.

dd if=nul of=/the/file/to/truncate bs=1 count=0 seek=the_file_size oflag=append
puedo hacer
fuente
El potencial dd nunca deja de sorprenderme, el comando funciona pero sin if = nul.
también