답변:
이 정보를 얻는 특정 명령 (또는 적어도 내가 아는 명령)은 없지만에서 제공하는 명령 사이에서 찾을 수 있습니다 systeminfo.exe
.
systeminfo.exe
PS에서 gWaldo의 답변과 마찬가지로 그 자체로 작동합니다
배치 파일에서 다른 작업을 조건부로 수행하기 위해 실제 로케일이 필요한 경우 다음을 사용하여 배치 파일 (텍스트 파일을 .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!
)
)
실제로 제안 은 현재 로캘에 따라 변경 되는 문자열 ( " 시스템 로캘 ")을 검색하므로 실패합니다 . 내 프랑스어 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에서와 같은 내보내기 명령 없음 ).
다시 나.
스크립트가 약간 향상되었습니다. SETX를 사용하면 향후 CMD Windows에서 사용할 수 있도록 환경 변수를 USER 환경에 저장할 수 있습니다 ( 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 변수의 경우 값의 길이가 몇 단어 일 수 있으므로 SETX가 예상 한대로 하나의 매개 변수 만 받도록 %% C를 따옴표로 묶어야합니다.
이제 새 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)
추신 : 다른 언어를 가진 다른 국가의 다른 기고자들이 세미콜론 ';'을 찾는 것을 확인할 수 있다면 좋을 것입니다. Windows 시스템에서 작동합니다. 미리 감사드립니다!
System Locale: en-gb;English (United Kingdom)