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
.
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?
Get-UICulture
ou Get-Host
no PowerShell
(capitalização opcional)
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!
)
)
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).
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!
Tags windows utf-8 localization