Як отримати локальну систему в Windows 7 cmd?


23

Як я можу отримати локальну систему в Windows 7?

Я маю на увазі щось на кшталт: cs_CZ.UTF-8

Я спробував написати "locale" в командному рядку, але це не працює в Windows. Будь-які пропозиції?

Відповіді:


17

Немає конкретної команди (або, принаймні, не тієї, про яку я знаю), щоб отримати цю інформацію, але ви можете знайти її між тими, які надає systeminfo.exe.


3
При запуску systeminfo в командному рядку на екран виводиться багато інформації. Відповідна інформація, яку потрібно шукати, є: Місцевий пошук системи: en-us; Англійська (США) Місце введення: en-us; Англійська (Сполучені Штати)
djondal

systeminfo / FO csv | Перетворити з Csv | select * locale
Тільки студент

@Ogrish Man: Це здається командою Powershell, але це не дає мені результатів. Може тому, що заголовки не англійською. systeminfo.exeсам по собі працює, як і відповідь gWaldo в PS
mivk


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!        
   )
)

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.