Como obter a localidade do sistema no Windows 7 cmd?

20

Como posso obter a localidade do sistema no Windows 7?

Quero dizer algo como: cs_CZ.UTF-8

Eu tentei escrever "locale" na linha de comando, mas isso não funciona no Windows. Alguma sugestão?

    
por Richard Knop 23.08.2010 / 19:07

5 respostas

15

Não há um comando específico (ou, pelo menos, nenhum que eu conheça) para obter essas informações, mas você pode encontrá-las entre as fornecidas por systeminfo.exe .

    
por 23.08.2010 / 19:11
9

Get-UICulture ou Get-Host no PowerShell

(capitalização opcional)

    
por 23.08.2010 / 22:12
0

Se você precisar que a localidade real condene outras coisas em um arquivo de lote, você pode criar um arquivo de lote (salve um arquivo de texto como extensão .bat) com o seguinte. Como ponto de partida, isso será impresso no prompt de comando, por exemplo, "en-us" (sem aspas) Você também pode usar a variável! VERBOSE_SYSTEM_LOCALE! para o local legível por humanos, por ex. Inglês (Estados Unidos)

@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!        
   )
)
    
por 04.07.2016 / 13:13
0

Na verdade, suas propostas falham, porque elas dependem da pesquisa de uma string (" System Locale ") que muda dependendo da localidade atual! No meu francês Win10Pro, a string é " Opção regional do sistema " (com letra acentuada, que é muito difícil de manipular corretamente em um arquivo CMD).

Eu fiz alguns testes, e parece, no MEU sistema, que as linhas sobre locale na saída systeminfo são as únicas que contêm um caractere ponto-e-vírgula (";"):

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)

Com base nisso (o que pode NÃO ser verdade em outros sistemas com idiomas diferentes), codifiquei este script 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
    )
)

O resultado do meu script no MEU sistema é:

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)

Esteja avisado, no entanto, que as três variáveis de ambiente existem somente dentro do script, elas NÃO persistem no ambiente CMD após o script terminar (nenhum comando export como em * nix).

    
por 24.09.2017 / 17:33
0

novamente.

Eu descobri uma ligeira melhoria no meu roteiro. Usando o SETX, é possível armazenar variáveis de ambiente no ambiente USER para que o futuro CMD Windows seja usado (conforme declarado em SETX /? segundo comentário).

Em seguida, o script get_locale.cmd se torna:

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

Para a variável VERBOSE_SYSTEM_LOCALE, uma vez que o valor é possivelmente de várias palavras, é necessário colocar %% C em aspas para que o SETX receba apenas um parâmetro conforme o esperado.

Agora, em qualquer janela do novo CMD, esses valores estarão disponíveis:

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: Seria bom se outros colaboradores de outros países com outras línguas pudessem confirmar que procuravam por ponto-e-vírgula ';' funciona em seus sistemas Windows. Agradecemos antecipadamente!

    
por 16.12.2017 / 02:26