Jak mogę uzyskać ustawienia regionalne systemu w Windows 7?
Mam na myśli coś takiego: cs_CZ.UTF-8
Próbowałem napisać „locale” w wierszu polecenia, ale to nie działa w systemie Windows. Jakieś sugestie?
Jak mogę uzyskać ustawienia regionalne systemu w Windows 7?
Mam na myśli coś takiego: cs_CZ.UTF-8
Próbowałem napisać „locale” w wierszu polecenia, ale to nie działa w systemie Windows. Jakieś sugestie?
Odpowiedzi:
Nie ma określonego polecenia (a przynajmniej takiego, którego jestem świadom), aby uzyskać te informacje, ale możesz je znaleźć między tymi dostarczonymi przez systeminfo.exe
.
systeminfo.exe
samo w sobie działa, podobnie jak odpowiedź gWaldo w PS
Jeśli potrzebujesz rzeczywistych ustawień regionalnych, aby warunkowo wykonywać inne czynności w pliku wsadowym, możesz utworzyć plik wsadowy (zapisać plik tekstowy jako rozszerzenie .bat) w następujący sposób. Jako punkt początkowy zostanie to wypisane do wiersza poleceń, na przykład „en-us” (bez cudzysłowów) Możesz także użyć zmiennej! VERBOSE_SYSTEM_LOCALE! dla ustawień regionalnych czytelnych dla człowieka, np. angielski (UnitedStates)
@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!
)
)
W rzeczywistości Twoje propozycje zawodzą, ponieważ polegają na wyszukiwaniu ciągu („ Ustawienia regionalne systemu ”), który zmienia się w zależności od bieżących ustawień regionalnych! W mojej francuskiej wersji Win10Pro ciąg ma postać „ Option régionale du système ” (z akcentowaną literą, co jest bardzo trudne w obsłudze w pliku CMD).
Przeprowadziłem pewne testy i wydaje się, że w MOIM systemie, wiersze o lokalizacji w wynikach systeminfo są jedynymi, które zawierają znak średnika („;”):
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)
Na tej podstawie (co może NIE być prawdą w innych systemach z różnymi językami), kodowałem ten skrypt 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
)
)
Wynikiem mojego skryptu w MOIM systemie jest:
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)
Ostrzegamy jednak, że trzy zmienne środowiskowe istnieją tylko wewnątrz skryptu, NIE utrzymują się one w środowisku CMD po zakończeniu skryptu (brak polecenia eksportu, jak w * nix).
Znowu ja.
Odkryłem niewielkie ulepszenie mojego skryptu. Za pomocą SETX można przechowywać zmienne środowiskowe w środowisku USER, aby móc z nich korzystać w przyszłości w systemie CMD Windows (jak podano w drugiej uwadze SETX /? ).
Następnie skrypt get_locale.cmd staje się:
@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
)
)
W przypadku zmiennej VERBOSE_SYSTEM_LOCALE, ponieważ wartość może mieć kilka słów, konieczne jest zawinięcie %% C w cudzysłów, aby SETX otrzymał tylko jeden parametr zgodnie z oczekiwaniami.
Teraz w każdym nowym oknie CMD te wartości będą dostępne:
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: Byłoby miło, gdyby inni autorzy z innych krajów w innych językach mogli potwierdzić, że szukają średnika ”;” działa na swoich systemach Windows. Z góry dziękuję!
System Locale: en-gb;English (United Kingdom)