2017-08-28 1 views
0

Ich versuche, die Zeichenfolge „KB“ in eine Datei anhängen, nachdem die Ausgabe von einem Windows-Befehl geschrieben zu haben:Anfügen in Windows-Datei mit >> zeigt seltsame Zeichen

C:\Users\Administrator> wmic OS get FreePhysicalMemory > C:\temp\temp.txt 
C:\Users\Administrator> echo KB >> C:\temp\temp.txt 

aber im Notizblock ich einige sehen seltsame orientalische Zeichen anstelle von KB

FreePhysicalMemory 
1441960    
䉋ഠ∊䉋•਍਍ 

ich erwarte, dass der Text "FreePhysicalMemory 1.441.960 KB" zu sehen. Wenn möglich, ich möchte KB nach der Nummer haben, nicht auf einer neuen Zeile. Sobald ich das tun werde ich die Datei mit einem anderen Programm (Intersystem Caché) verwenden und es in einer anderen HTML-Datei platzieren, aber das sollte keine Rolle spielen.

Antwort

2

wmic schreibt die Ausgabe als UTF-16LE (mit einer BOM), wenn Sie ASCII-Zeichen an diese tends to look Chinese anhängen.

Sie cmd.exe zwingen kann, UTF-16 als auch mit dem Schalter/u schreiben:

wmic OS get FreePhysicalMemory > out.txt 
cmd /U /C echo kb ^>^> out.txt 

Um es als eine einzige Zeile zu schreiben, ist viel komplizierter, als es sein sollte.

FOR /F "delims=" %A IN ('wmic OS get FreePhysicalMemory /Format:list ^| more') do @FOR /F "tokens=1,* delims==" %B in ("%A") do @echo.%B %C KB > out.txt 

Piping zu more wandelt von UTF-16 und die second for loop removes empty lines.

+0

Sie brauchen nicht zu more.com zu Rohr. Die 'for'-Schleife von CMD führt wmic.exe aus, wobei das stdout auf eine Pipe umgeleitet wird. Das ist alles, was Sie brauchen, um wmic.exe Ausgabe OEM-kodierten Text zu machen. Im Allgemeinen sollten Sie hier auf mojibake achten, da CMD die Ausgabezeilen mit der aktuellen Konsolencodepage dekodiert und ansonsten ANSI verwendet, wenn es ohne Konsole ausgeführt wird (d. H. Getrennt). Die Konsole ist standardmäßig auf OEM eingestellt, wurde jedoch möglicherweise über chcp.com geändert. – eryksun

+0

Die for-Schleife funktioniert um einen Fehler in wmic.exe. Der C-Runtime Low I/O-Dateideskriptor wird im Textmodus geöffnet, der LF => CRLF übersetzt. wmic.exe schreibt Zeilen, die bereits in CRLF enden, so dass die C-Laufzeit Zeilen schreibt, die mit CRCRLF enden. Die erste "for" -Schleife teilt Zeilen auf der letzten CRLF, hinterlässt jedoch eine nachlaufende CR auf jeder Zeile. – eryksun

+0

Im Allgemeinen mit Wmic.exe Codierung seiner Ausgabe als OEM-Text möglicherweise Unicode-Zeichenfolgen wie Dateinamen, Registrierungstext und Benutzernamen falsch codieren. Es ist besser, wenn UTF-16 in eine Datei geschrieben wird, wenn das möglicherweise ein Problem ist. – eryksun

Verwandte Themen