none
cmd и кодировка RRS feed

  • Вопрос

  • Доброе.

    Не могу понять, как разрешить проблему кодировки для русскоязычного текста при получении данных из команд, к примеру необходимо вывести только шлюз по умолчанию из команды -  ipconfig | find "шлюз" в ответ тишина, а при ipconfig | find "IP" видим, что есть проблема с кодировкой.  

    Проблема только в windows xp.


    ...

    1 сентября 2013 г. 6:34

Ответы

  • Всем спасибо, разобрался с проблемой. В общем она заключалась в том, что данные я выводил в вначале в текстовый файл, а  уже из него пытался получить нужные мен данные, так вот в зависимости от кодировки cmd файла (866 или 1251) получалось вытащить данные либо на XP либо на 7 и не помогали танцы и с изменением  chcp.   

    Сейчас в таком виде работает:

    ver|find " 6." > nul
    if %ERRORLEVEL%==0 (
    chcp
    for /f  "tokens=11 delims=: " %%i in ('ipconfig /all ^| find "шлюз"') DO set gw=%%i
    ) else (
    chcp 1251>nul
    for /f "tokens=13 delims=: " %%i in ('ipconfig /all ^| find "шлюз"') DO set gw=%%i
    chcp 866>nul)


    ...


    6 сентября 2013 г. 1:09

Все ответы

  • В настройках языковых параметров у вас какой язык стоит для программ, не поддерживающих Юникод? Поставьте русский.
    1 сентября 2013 г. 14:59
  • Если было бы так просто, естественно там стоит русский. Внимательней посмотрите на картинку с выводом команд ipconfig и ipconfig | find “Что то по русски….

    ...

    1 сентября 2013 г. 15:07
  • Кодировка в командной строке меняется с помощью команды chcp

    • Предложено в качестве ответа GemaGlass 2 сентября 2013 г. 10:43
    2 сентября 2013 г. 7:48
  • Про chcp, я в курсе, но Ребят, смотрите внимательней на картинку. Почему поведение с кодировкой отличается в разных версиях Windows? Как прийти к единому виду, с нормальным решением?

     Как прийти к единому виду?


    ...

    2 сентября 2013 г. 17:19
  • Видимо поведение изменилось от версии к версии.

    Таким образом если у вас все еще используется ХП то придется определять версию и искать разные строки.

    Версию можно определить распарсив вывод команды ver. Для проверки версии проще всего использовать find с конкретной версией, после чего проверить errorlevel:

    @echo off
    ver | find "6." >nul
    if ERRORLEVEL 0 echo This is not XP.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    2 сентября 2013 г. 18:51
    Модератор
  • Версию можно определить распарсив вывод команды ver. Для проверки версии проще всего использовать find с конкретной версией, после чего проверить errorlevel:

    @echo off
    ver | find "6." >nul
    if ERRORLEVEL 0 echo This is not XP.

    Увы, не канает.


    ...

    4 сентября 2013 г. 16:49
  • Запускайте данные команды из CMD файла. Измените условие если надо чтоб работало в ваших условиях. Ни ХП ни Сермерки у меня нет, проверить скрипт я не могу.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    5 сентября 2013 г. 16:00
    Модератор
  • Замените в реестре ХР, кодовую страницу 866 на 1251:

    Такое ощущение, что Вы используете виртуальную ХР.


    Да, я Жук, три пары лапок и фасеточные глаза :))


    • Изменено ЖукMVP, Moderator 5 сентября 2013 г. 20:08 внесение ясности
    5 сентября 2013 г. 19:45
    Модератор
  • Всем спасибо, разобрался с проблемой. В общем она заключалась в том, что данные я выводил в вначале в текстовый файл, а  уже из него пытался получить нужные мен данные, так вот в зависимости от кодировки cmd файла (866 или 1251) получалось вытащить данные либо на XP либо на 7 и не помогали танцы и с изменением  chcp.   

    Сейчас в таком виде работает:

    ver|find " 6." > nul
    if %ERRORLEVEL%==0 (
    chcp
    for /f  "tokens=11 delims=: " %%i in ('ipconfig /all ^| find "шлюз"') DO set gw=%%i
    ) else (
    chcp 1251>nul
    for /f "tokens=13 delims=: " %%i in ('ipconfig /all ^| find "шлюз"') DO set gw=%%i
    chcp 866>nul)


    ...


    6 сентября 2013 г. 1:09