Redimensionner un fichier dans l'invite de commande?

14

Comment redimensionner un fichier à partir de l'invite de commande (ou dans un fichier batch)?

  • Il doit traiter le fichier comme binaire . Le format de fichier n'est pas pertinent et arbitraire.

  • L'extension du fichier doit le remplir de zéros.

  • La réduction du fichier doit tronquer le fichier.

En d'autres termes:

Comment dupliquez-vous la fonctionnalité de SetEndOfFiledans l'invite de commande?

user541686
la source
Vous pouvez essayer diskpart .
jpaugh

Réponses:

10

Je ne crois pas que la fonctionnalité existe nativement dans le shell DOS, je pense que vous devez utiliser un autre programme pour faire le travail. Voici quelques possibilités:

  1. Il existe un outil appelé Trunc qui prétend faire exactement ce que vous recherchez:

    Trunc est une application en ligne de commande Windows pour tronquer des fichiers à une taille spécifiée. Également utilisable pour agrandir un fichier.

    Vous devrez l'essayer pour savoir exactement comment le fichier est rembourré (par exemple avec des zéros ou des ordures) mais sinon cela semble correspondre à la facture de ce que vous demandez.

  2. fsutil est un outil système Windows XP et supérieur qui semble avoir certaines fonctionnalités qui pourraient aider. Plus précisément, la fsutil filesous - commande semble pouvoir créer, définir des fichiers de longueur et de remplissage nul.

    Plus précisément:

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

    Va créer un fichier de 1024 octets rempli de zéro, mais je ne vois pas de moyen de tronquer le fichier. Il existe une commande qui définit une longueur de données valide, mais elle ne semble pas modifier le marqueur EOF comme:

    Utilisation de setvaliddata

    Dans NTFS, il existe deux concepts importants de longueur de fichier: le marqueur de fin de fichier (EOF) et la longueur de données valide (VDL). L'EOF indique la longueur réelle du fichier. Le VDL identifie la longueur des données valides sur le disque. Toute lecture entre VDL et EOF renvoie automatiquement 0 afin de préserver l'exigence de réutilisation de l'objet C2.

  3. UVHD est un éditeur hexadécimal qui semble avoir les fonctions que vous demandez. Le seul problème est qu'il ne fonctionne que sous Windows / SFU (Services pour Unix) et non sous DOS. Ce que cela signifie réellement pour un utilisateur final, je ne sais pas vraiment, mais j'ai un vague soupçon que SFU a été abandonné dans Vista et Win 7.

Mokubai
la source
1
Ah ok. Merci, truncfait ce dont j'ai besoin. Oh, et une note: SFU (ou plutôt SUA - "Subsystem for Unix-Based Applications", alias Interix) n'a pas été abandonné dans Windows 7; c'est juste maintenant un composant optionnel dans la version Ultimate, malheureusement. : \
user541686
Ah, assez bien, je n'ai pas pu trouver grand-chose sur la manière d'obtenir des informations sur SUA / SFU, mais pour être honnête, je n'ai pas regardé de trop près. J'ai également trouvé un autre moyen de créer des fichiers de longueur arbitraire en utilisant fsutilet modifié ma réponse, mais comme je l'ai noté, je ne vois pas de moyen valide pour tronquer les fichiers.
Mokubai
Soit dit en passant, je pensais souligner quelque chose: je crois que la longueur de données valide est la longueur virtuelle du fichier sur le disque, pas la longueur physique . Si le fichier est compressé, par exemple, il pourrait en fait être plus petit - vous auriez besoin de la taille compressée du fichier.
user541686
5
copy /Y nul: file.txt

Pour la mise à 0 octets uniquement, bien sûr.

KipB7
la source
2
Cela ne semble vraiment pas répondre à la question.
Manishearth
+1 Je suis d'accord que ce n'est pas la bonne réponse mais c'est exactement ce que je suis venu chercher ici - comment tronquer un fichier à partir de la ligne de commande Windows.
Dan Atkinson
2

Si GnuWin32 est installé, vous pouvez l'utiliser ddpour le faire.

dd if=nul of=/the/file/to/truncate bs=1 count=0 seek=the_file_size oflag=append
Je peux faire
la source
dd potentiel ne cesse de m'étonner, la commande fonctionne mais sans if = nul.
trop