Кодовая страница 850 работает, 65001 не работает! НЕТ ответа на "call foo.cmd". внутренние команды работают нормально - PullRequest
4 голосов
/ 04 августа 2010

Вопрос в основном объясняет проблему.

Я использую Windows XP Pro с пакетом обновления 3
COMSPEC = C: \ WINDOWS \ system32 \ cmd.exe
Я запустил консоль через Пуск ... Диалог запуска ... cmd.exe

Вот «вид» моей консоли:
Команда, затем вывод (и мои // комментарии)

C:\> chcp 850
Active code page: 850
// output is as expected

C:\> echo @chcp ^& REM 850>test850.cmd
// no output; as ecpected)

C:\> type test850.cmd
@chcp & REM 850
// output is as expected

C:\> call test850.cmd
Active code page: 850
// output is as expected

Выше работает нормально (как и ожидалось). Все хорошо в Windows-земле, но "вызов" не удается, когда я переключаюсь на кодовую страницу 65001

C:\> chcp 65001
Active code page: 65001
// output is as expected

C:\> echo @chcp ^& REM 65001>test65001.cmd
// no output; as ecpected

C:\> type test65001.cmd
@chcp & REM 65001
// output is as expected

C:\> call test65001.cmd
// NO OUTPUT, NO ERROR, NO ANYTHING, NADA... other than frustration :)

Что здесь происходит (НЕ происходит)?

Ответы [ 2 ]

3 голосов
/ 04 августа 2010

Интересно, на самом деле это вообще не работает.Если вы сделаете следующее:

pax> echo echo yy >xx.cmd
pax> chcp 850
pax> xx
yy
pax> chcp 65001
pax> xx
pax> _

, вы получите ничего .Он не просто пропускает вывод, он вообще не работает (о чем свидетельствует start . перед строкой echo).На кодовой странице 850, Explorer работает, но не для кодовой страницы 65001.

Здесь обсуждается вопрос о здесь .Вы можете заставить ваш скрипт работать с:

chcp 65001 && xx.cmd && chcp 850

, поэтому, похоже, что это некая проблема в запуске командных файлов, но только когда кодовая страница 65001, прежде чем вы введете команду!

Другие в сети, кажется, предполагают, что PowerShell может быть хорошим выбором, учитывая ограниченную поддержку в cmd.exe.Это решение вам придется оценить самостоятельно, но, работая в большой организации со многими инструментами для выполнения той же работы, я подозреваю, что Microsoft будет прилагать какие-либо усилия по улучшению PowerShell, а не более старой командной оболочки.Их ресурсы велики, но не безграничны.

1 голос
/ 20 мая 2014

Причина этого заключается в том, что cmd.exe для Windows XP внутренне вызывает функцию MultiByteToWideChar, используя аргумент dwFlags со значением 1. В документации сказано следующее: «Для UTF-8 dwFlags должен быть равен 0. В противном случаефункция терпит неудачу ".

Патч для этого здесь: http://consolesoft.com/p/cmd-xp-65001-fix/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...