Как получить системную локаль в Windows 7 cmd?

23

Как я могу получить системный язык в Windows 7?

Я имею в виду что-то вроде: cs_CZ.UTF-8

Я попытался написать «локаль» в командной строке, но это не работает в Windows. Какие-либо предложения?

Ричард Кноп
источник

Ответы:

17

Нет конкретной команды (или, по крайней мере, не известной мне) для получения этой информации, но вы можете найти ее между теми, которые предоставляет systeminfo.exe.

Massimo
источник
3
При запуске systeminfo в командной строке на экран выводится много информации. Соответствующая информация для поиска: Язык системы: en-us; Английский (США) Язык ввода: en-us; Английский (США)
djondal
systeminfo / FO csv | ConvertFrom-Csv | выберите * локаль
просто ученик
@Ogrish Man: Кажется, это команда Powershell, но она не дает никакого вывода. Может быть, потому что заголовки не на английском языке. systeminfo.exeсамо по себе работает, как и ответ gWaldo в PS
mivk
9

Get-UICulture или Get-Host в PowerShell

(заглавная буква необязательна)

gWaldo
источник
0

Если вам нужен фактический язык для условного выполнения других действий в командном файле, вы можете создать командный файл (сохранить текстовый файл с расширением .bat) с помощью следующего. В качестве отправной точки это выведет в командную строку, например, «en-us» (без кавычек). Вы также можете использовать переменную! VERBOSE_SYSTEM_LOCALE! для удобочитаемого языка, например, английского (UnitedStates)

@echo off
setlocal EnableDelayedExpansion
FOR /F "delims==" %%G IN ('systeminfo.exe') Do  (
    set input=%%G
    for /l %%a in (1,1,100) do if "!input:~-1!"==" " set input=!input:~0,-1!
    IF "!input:~0,13!"=="System Locale" (
        set answer=!input:~15!
        set answer=!answer: =!
        set VERBOSE_SYSTEM_LOCALE=!answer:*;=!
        call set SYSTEM_LOCALE_WITH_SEMICOLON=%%answer:!VERBOSE_SYSTEM_LOCALE!=%%
        set SYSTEM_LOCALE=!SYSTEM_LOCALE_WITH_SEMICOLON:~0,-1!
        echo !SYSTEM_LOCALE!        
   )
)
fitzciaran
источник
0

На самом деле, ваши предложения терпят неудачу, потому что они основаны на поиске строки (« Системная локаль »), которая меняется в зависимости от текущей локали! На моем французском Win10Pro строка " Option régionale du système » (с акцентированной буквой, которую очень трудно правильно обработать в файле CMD).

Я провел некоторое тестирование, и, похоже, в моей системе строки о локали в выходных данных systeminfo - единственные, которые содержат точку с запятой (";"):

24/09/2017 17:18:43,23 | C:\CMD ()
> systeminfo | findstr ;
Option régionale du système:                fr;Français (France)
Paramètres régionaux d'entrée:              fr;Français (France)

Основываясь на этом (что не может быть правдой в других системах с другими языками), я написал этот скрипт get_locale.cmd :

@echo off
setlocal EnableDelayedExpansion    
FOR /F "delims==" %%A IN ('systeminfo.exe ^|  findstr ";"') do  (
    FOR /F "usebackq tokens=2-3 delims=:;" %%B in (`echo %%A`) do (
        set VERBOSE_SYSTEM_LOCALE=%%C
        REM Removing useless leading spaces ...
        FOR /F "usebackq tokens=1 delims= " %%D in (`echo %%B`) do (
            set SYSTEM_LOCALE=%%D
        )
        set SYSTEM_LOCALE_WITH_SEMICOLON=!SYSTEM_LOCALE!;
    set | findstr /I locale
    REM No need to handle second line, quit after first one
    goto :EOF
    )
)

Результат моего скрипта на МОЕЙ системе:

24/09/2017 17:18:45,31 | C:\CMD ()
> get_locale.cmd
SYSTEM_LOCALE=fr
SYSTEM_LOCALE_WITH_SEMICOLON=fr;
VERBOSE_SYSTEM_LOCALE=Français (France)

Однако имейте в виду, что три переменные среды существуют только внутри сценария, они НЕ сохраняются в среде CMD после завершения сценария (нет команды экспорта, как в * nix).

Сигрь
источник
0

мне еще раз.

Я обнаружил небольшое улучшение в моем сценарии. Используя SETX, можно хранить переменные среды в среде USER для использования в будущем CMD Windows (как указано в SETX /? Второе замечание).

Тогда скрипт get_locale.cmd становится:

@ECHO OFF
SETLOCAL EnableDelayedExpansion    
FOR /F "delims==" %%A IN ('systeminfo.exe ^|  findstr ";"') DO (
    FOR /F "usebackq tokens=2-3 delims=:;" %%B IN (`echo %%A`) DO (
        SET VERBOSE_SYSTEM_LOCALE=%%C
        setx VERBOSE_SYSTEM_LOCALE "%%C" 1>NUL
        REM Removing useless leading spaces ...
        FOR /F "usebackq tokens=1 delims= " %%D IN (`echo %%B`) DO (
            SET SYSTEM_LOCALE=%%D
            setx SYSTEM_LOCALE %%D 1>NUL
        )
        SET SYSTEM_LOCALE_WITH_SEMICOLON=!SYSTEM_LOCALE!;
        setx SYSTEM_LOCALE_WITH_SEMICOLON !SYSTEM_LOCALE!; 1>NUL
    SET | findstr /I locale
    REM No need to handle second line, quit after first one
    GOTO :EOF
    )
)

Для переменной VERBOSE_SYSTEM_LOCALE, поскольку значение может быть длиной в несколько слов, необходимо заключить %% C в кавычки, чтобы SETX получил только один параметр, как и ожидалось.

Теперь в любом новом окне CMD будут доступны следующие значения:

16/12/2017  2:00:46 | C:\Users\Seagram ()
>set | findstr /i locale
SYSTEM_LOCALE=fr
SYSTEM_LOCALE_WITH_SEMICOLON=fr;
VERBOSE_SYSTEM_LOCALE=Français (France)

PS: Было бы неплохо, если бы другие участники из других стран с другими языками могли подтвердить, что ищут точку с запятой ';' работает в своих системах Windows. Заранее спасибо!

Сигрь
источник
Пожалуйста, рассмотрите возможность объединения этого ответа с вашим предыдущим.
kbyrd
@Seagram - спасибо за это - я могу подтвердить, что он работает на английском языке (United Kingom):System Locale: en-gb;English (United Kingdom)
SteveR