Como obter a localidade do sistema no Windows 7 cmd?

23

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?

Richard Knop
fonte

Respostas:

17

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

Massimo
fonte
3
Ao executar informações do sistema em uma linha de comando, muitas informações são exibidas na tela. A informação relevante é a olhar para: localidade do sistema: en-us; Inglês (Estados Unidos) Input Locale: en-us; Inglês (Estados Unidos)
djondal
systeminfo / FO csv | ConvertFrom-CSV | select * locale
Apenas um aluno
@Ogrish Man: Este parece ser um comando do PowerShell, mas não me dá saída. Talvez porque os cabeçalhos não estejam em inglês. systeminfo.exepor si só funciona, assim como a resposta do gWaldo no PS
mivk 16/06
9

Get-UICultureou Get-Hostno PowerShell

(capitalização opcional)

gWaldo
fonte
0

Se você precisar que o código do idioma real faça outras coisas condicionalmente em um arquivo em lotes, poderá criar um arquivo em lotes (salvar 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 exemplo, 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!        
   )
)
fitzciaran
fonte
0

De fato, suas propostas falham porque dependem da pesquisa de uma string (" Localização do Sistema ") que muda dependendo da localidade atual! No meu Win10Pro francês, a string é " Option régionale du système " (com letra acentuada, que é muito difícil de manusear corretamente em um arquivo CMD).

Eu fiz alguns testes e parece, no MEU sistema, que as linhas sobre a localidade 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 NÃO pode ser verdade em outros sistemas com idiomas diferentes), codifiquei esse 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)

Entretanto, esteja avisado de que as três variáveis ​​de ambiente existem apenas dentro do script, elas NÃO persistem no ambiente CMD após o término do script (nenhum comando de exportação como no * nix).

Seagram
fonte
0

eu de novo.

Eu descobri um leve aprimoramento no meu script. Usando o SETX, pode-se armazenar variáveis ​​de ambiente no ambiente USER para futuras janelas CMD (como indicado 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, como o valor possui possivelmente várias palavras, é necessário agrupar %% C entre aspas para que o SETX receba apenas um parâmetro conforme o esperado.

Agora, em qualquer nova janela do 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 outros idiomas pudessem confirmar que procurando por ponto-e-vírgula ';' funciona em seus sistemas Windows. Desde já, obrigado!

Seagram
fonte
Por favor, considere combinar esta resposta com a anterior.
Kbyrd
@ Seagram - obrigado por isso - posso confirmar que funciona em inglês (United Kingom):System Locale: en-gb;English (United Kingdom)
SteveR