cmd écrit en quelque sorte le texte chinois en sortie

J’ai quelques problèmes avec cmd.exe, je l’utilise parfois pour créer des fichiers et y écrire la sortie. Mais si j’essaie ceci:

wmic logicaldisk get name, freespace >> output.txt echo %date% >> output.txt 

Et je le commence 2-3 fois, je reçois un output.txt comme:

 FreeSpace Name 17990881280 C: D:㠱〮⸴〲㈱ഠ䘊爀攀攀匀瀀愀挀攀    一愀洀攀  ഀ਀㄀㜀㤀㤀 㠀㠀㄀㈀㠀   䌀㨀    ഀ਀             䐀㨀    ഀ਀㄀⸸㐰㈮㄰′਍ 

Eh bien, ce texte chinois semble drôle, mais j’aimerais voir la date. Je pense que l’encodage est en quelque sorte changé avec la date. Parce que si je fais écho à% date% >> output.txt, tout va bien, j’obtiens la date. Que dois-je faire, je voudrais obtenir la sortie wmic et la date. Des idées? Je vous remercie

WMIC a une sortie étrange. J’ai vu une discussion où il a été dit que WMIC utilise unicode, mais je pense que la situation est plus compliquée que cela. Si je capture la sortie WMIC dans un fichier et utilise un éditeur hexadécimal, je vois un retour chariot supplémentaire à la fin de chaque ligne. Je ne comprends absolument pas comment le contenu de la date est converti en charabia lorsque le fichier output.txt est saisi. (problème de page de code? mais comment?) Sur ma machine, je reçois des points d’interrogation où la date devrait être.

J’ai pu résoudre le problème en utilisant

 wmic logicaldisk get name, freespace | more >>output.txt echo %date%>>output.txt 

La raison en est que le WMIC est envoyé à UNICODE. Alors que le lot commande les sorties à ANSI par défaut. La page de code ANSI étant plus petite que UNICODE et mappée différemment, leur conversion devient un problème. Il existe plusieurs façons de résoudre ce problème.

A. Démarrez le shell de commande avec le commutateur / U ou si vous êtes déjà dans une invite de commande, tapez simplement cmd / U.

Aide de la commande “Aide cmd”: / U Provoque la sortie des commandes internes vers un tube ou un fichier vers Unicode

Ainsi, vous allez vous retrouver avec un fichier texte UNICODE et votre code d’origine n’a pas besoin de modification. Cependant, vous devez vous rappeler de toujours utiliser le commutateur / U. La manière correcte de le faire est également:

  wmic /OUTPUT:output.txt logicaldisk get name, freespace echo %date% >> output.txt 

B. Convertissez la sortie WMIC en ANSI (Recommandé. Cependant, cela dépend de ce dont vous avez besoin. Simplifiez-vous la vie lorsque vous décidez d’append un fichier texte. Cependant, vous devrez utiliser 2 fichiers de sortie.).

  wmic /OUTPUT:output.tmp logicaldisk get name, freespace TYPE output.tmp > output.txt echo %date% >> output.txt 

J’espère que cela aidera quelqu’un.

J’ai trouvé qu’un script batch utilisé pour créer un fichier de sortie txt en utilisant stdout “>>” pour créer le fichier txt est compatible avec le format de sortie ascii, utf8 et utf7 de powershell, tous les autres formats de sortie génèrent des espaces supplémentaires.

Si le fichier de sortie est créé avec powershells stdout “>>”, les ajouts stdout au fichier à partir d’un script de traitement par lots apparaîtront sous la forme de caractères chinois.

La solution de contournement dans mon cas était de recréer le fichier de sortie avec le script de traitement par lots et il sera au bon format et les ajouts de PowerShell suivants devront utiliser “| out-file -encoding ascii / utf8 / utf7”