回答:
この情報を取得するための特定のコマンドはありません(少なくとも、私が知っているコマンドはありません)が、提供されてsysteminfo.exe
いるコマンドの中から見つけることができます。
systeminfo.exe
自身の作品で、としてPSにgWaldoの答えをして
バッチファイルで他の処理を条件付きで実行するために実際のロケールが必要な場合は、次を使用してバッチファイルを作成(テキストファイルを.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!
)
)
実際、現在のロケールに応じて変化する文字列(「システムロケール」)の検索に依存しているため、提案は失敗します。私のフランス語Win10Proでは、文字列は「オプションRegionaleもデュSYSTEME(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
)
)
MYシステムでのスクリプトの結果は次のとおりです。
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つの環境変数はスクリプト内にのみ存在し、スクリプトの終了後はCMD環境に保持されないことに注意してください(* nixのようなエクスポートコマンドはありません)。
またね
スクリプトが少し強化されていることを発見しました。SETX を使用すると、将来の CMD Windowsで使用するために、環境変数をUSER環境に保存できます(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変数の場合、値は数ワードの長さである可能性があるため、%% Cを引用符にラップして、SETXが期待どおりに1つのパラメーターのみを受け取るようにする必要があります。
これで、新しい 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システムで動作します。前もって感謝します!
System Locale: en-gb;English (United Kingdom)