Answers:
没有特定的命令(或者至少不是我所知道的命令)来获取此信息,但是您可以在中提供的命令之间找到它systeminfo.exe
。
systeminfo.exe
本身就起作用,就像gWaldo在PS中的回答一样
如果您需要实际的语言环境来有条件地在批处理文件中执行其他操作,则可以创建具有以下内容的批处理文件(将文本文件另存为.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,该字符串为“ 选项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
)
)
我的脚本在我的系统上的结果是:
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可以将环境变量存储到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系统上工作。提前致谢!
System Locale: en-gb;English (United Kingdom)