如何在Windows 7 cmd中获取系统区域设置?


23

如何在Windows 7中获得系统区域设置?

我的意思是:cs_CZ.UTF-8

我尝试在命令行中编写“语言环境”,但这在Windows中不起作用。有什么建议么?

Answers:


17

没有特定的命令(或者至少不是我所知道的命令)来获取此信息,但是您可以在中提供的命令之间找到它systeminfo.exe


3
在命令行上运行systeminfo时,许多信息会输出到屏幕上。要查找的相关信息是:系统区域设置:en-us;英语(美国)输入区域设置:en-us;英语(美国)
djondal 2014年

systeminfo / FO csv | ConvertFrom-Csv | 选择* locale
只是一个学习者

@Ogrish Man:这似乎是Powershell命令,但没有任何输出。可能是因为标题不是英文的。systeminfo.exe本身就起作用,就像gWaldo在PS中的回答一样
mivk


0

如果您需要实际的语言环境来有条件地在批处理文件中执行其他操作,则可以创建具有以下内容的批处理文件(将文本文件另存为.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

实际上,您的提案失败了,因为它们依赖于搜索根据当前语言环境而变化的字符串(“ 系统语言环境 ”)!在我的法语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中没有导出命令)。


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.