web-dev-qa-db-ja.com

Windows 7 cmdでシステムロケールを取得する方法

Windows 7でシステムロケールを取得するにはどうすればよいですか?

私は次のようなものを意味します:cs_CZ.UTF-8

コマンドラインで「ロケール」と書いてみましたが、Windowsでは動作しません。助言がありますか?

23
Richard Knop

この情報を取得するための特定のコマンドはありません(少なくとも、私が認識しているコマンドはありません)が、systeminfo.exeによって提供されるコマンドの間で見つけることができます。

18
Massimo

Get-UICultureまたはGet-Host PowerShell

(大文字はオプション)

10
gWaldo

再び私。

スクリプトが少し強化されていることを発見しました。 SETXを使用すると、環境変数をUSER環境に格納してfuture CMD Windowsで使用できます(SETX /?の2番目の注釈に記載されています)。

次に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変数の場合、値が数語になる可能性があるため、SETXが期待どおりに1つのパラメーターのみを受け取るように、%% Cを引用符で囲む必要があります。

これで、任意のnew 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システムで動作します。よろしくお願いします!

0
Seagram

バッチファイルで条件付きで他のことを行うために実際のロケールが必要な場合は、次のようにバッチファイルを作成できます(テキストファイルを.bat拡張子として保存します)。開始点として、これはコマンドプロンプトに出力されます。たとえば、 "en-us"(引用符なし)変数!VERBOSE_SYSTEM_LOCALE!を使用することもできます。人間が読めるロケール(例:英語(米国)

@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
fitzciaran

実際、提案は失敗します。現在のロケールに応じて変更される文字列( "System Locale")の検索に依存しているためです!私のフランス語のWin10Proでは、文字列は「Optionrégionaledusystème」です(アクセント付きの文字が付いているため、CMDファイルで適切に処理するのが非常に困難です)。

私はいくつかのテストを行いましたが、MYシステムでは、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)

ただし、3つの環境変数はスクリプト内にのみ存在することに注意してください。これらの変数は、スクリプトの終了後(CMDexportコマンドとして保持されません) * nixで)。

0
Seagram