CMD как-то пишет китайский текст в качестве вывода

У меня какие-то проблемы с cmd.exe, я иногда использую его для создания файлов и записи туда выходных данных. Но если я попробую это:

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

И я запускаю его 2-3 раза, я получаю output.txt, как:

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

Ну, этот китайский текст там выглядит забавно, но я бы хотел увидеть дату. Я думаю, что как-то кодировка меняется с датой. Потому что, если я сделаю эхо% date% & gt; & gt; один output.txt все хорошо, я получаю дату. Что мне делать, я хотел бы получить вывод wmic и дату. Есть идеи? Спасибо

 Vinod CG18 апр. 2012 г., 16:11
да ... в панели управления у вас будет возможность изменить язык системы
 sabisabi18 апр. 2012 г., 15:52
в чем язык?
 Vinod CG18 апр. 2012 г., 15:52
попробуйте изменить язык системы в панели управления
 Vinod CG18 апр. 2012 г., 16:12
Панель управления \ Все элементы панели управления нажмите изменить язык отображения
 sabisabi18 апр. 2012 г., 16:15
Я знаю, что могу изменить язык системы ^^ Но я не понимаю, почему я должен менять язык и что за новый язык я должен взять? Я был бы счастлив, если бы я мог исправить это с помощью cmd

Ответы на вопрос(3)

что WMIC выводит данные в UNICODE. В то время как пакетные команды выводятся в ANSI по умолчанию. Поскольку кодовая страница ANSI меньше UNICODE и отображается по-разному, преобразование между ними становится проблемой. Есть несколько способов решить эту проблему.

A. Запустите командную оболочку с ключом / U или, если она уже есть в командной строке, просто введите cmd / U.

Help from the "Help cmd" command: /U Causes the output of internal commands to a pipe or file to be Unicode

Таким образом, вы получите текстовый файл UNICODE, и ваш исходный код не нуждается в модификации. Однако вам нужно помнить, чтобы всегда использовать ключ / U. Также правильный способ сделать это:

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

B. Преобразовать вывод WMIC в ANSI (рекомендуется. Однако зависит от     что вам нужно. Просто облегчает жизнь, когда вы решили добавить в     текстовый файл. Тем не менее, вам придется использовать 2 выходных файла.).

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

Надеюсь, это кому-нибудь поможет.

что пакетный скрипт, используемый для создания выходного txt-файла с использованием stdout & gt; & gt; & quot; создание txt-файла совместимо с выходным форматом powershell ascii, utf8 и utf7, все остальные выходные форматы приводят к появлению в файле дополнительных пробелов.

Если выходной файл создан с помощью powershells stdout & gt; & gt; & quot; тогда любые добавления stdout в файл из пакетного скрипта будут отображаться в виде китайских символов.

Обходной путь в моем случае состоял в том, чтобы заново создать выходной файл с помощью пакетного сценария, и он будет в правильном формате, и последующие добавления PowerShell должны использовать & quot; out-file -encoding ascii / utf8 / utf7 & quot;

Решение Вопроса

в которой говорилось, что WMIC использует Unicode, но я думаю, что ситуация более сложная, чем эта. Если я записываю вывод WMIC в файл и использую шестнадцатеричный редактор, я вижу дополнительный возврат каретки в конце каждой строки. Я полностью в недоумении относительно того, как содержимое даты преобразуется в тарабарщину при вводе output.txt. (проблема с кодовой страницей? но как?) На моей машине я получаю знаки вопроса, где должна быть дата.

Я смог решить проблему с помощью

wmic logicaldisk get name, freespace | more >>output.txt
echo %date%>>output.txt 
 sabisabi19 апр. 2012 г., 12:57
Хорошо, ^^ самое главное, что это работает. Если кто-то знает, почему ответ можно выложить как комментарий :)
 18 апр. 2012 г., 17:39
@sabisabi - мне бы тоже хотелось понять, что происходит. Я недостаточно понимаю коренную проблему, чтобы постулировать, как работает исправление.
 20 апр. 2012 г., 00:45
@sabisabi - БОЛЬШЕ само по себе может точно конвертировать юникод в ansi, но, похоже, в WMIC встроены некоторые некорректные преобразования всякий раз, когда выводится по конвейеру. Таким образом, вывод WMIC уже "преобразован" прежде чем БОЛЬШЕ получит его. Обычный вывод WMIC - это исправный юникод. Трубопроводный вывод преобразуется в ANSI, за исключением того, что в конце каждой строки имеется дополнительный возврат каретки, а в конце вывода - дополнительная новая строка (с дополнительным возвратом каретки). Основываясь на ряде экспериментов, WMIC, кажется, делает это сам, но только тогда, когда вывод передается по конвейеру. Трубы, не использующие WMIC, не влияют на выход.
 sabisabi18 апр. 2012 г., 16:51
Спасибо, это работает. Хотелось бы понять почему. Кодировка изменена с| more ?
 20 апр. 2012 г., 03:12
Мое последнее утверждение было не совсем корректным - трубы добавятся<Carriage Return><LineFeed> до конца ввода, если последний байт не является<LineFeed>, Кроме этого, они не изменяют вывод.

Ваш ответ на вопрос