Comment obtenir les paramètres régionaux du système dans Windows 7?
Je veux dire quelque chose comme: cs_CZ.UTF-8
J'ai essayé d'écrire «locale» dans la ligne de commande mais cela ne fonctionne pas sous Windows. Aucune suggestion?
Comment obtenir les paramètres régionaux du système dans Windows 7?
Je veux dire quelque chose comme: cs_CZ.UTF-8
J'ai essayé d'écrire «locale» dans la ligne de commande mais cela ne fonctionne pas sous Windows. Aucune suggestion?
Réponses:
Il n'y a pas de commande spécifique (ou du moins, pas à ma connaissance) pour obtenir ces informations, mais vous pouvez les trouver entre celles fournies par systeminfo.exe
.
systeminfo.exe
par lui-même fonctionne, tout comme la réponse de gWaldo dans PS
Si vous avez besoin des paramètres régionaux réels pour effectuer d'autres tâches de manière conditionnelle dans un fichier de commandes, vous pouvez créer un fichier de commandes (enregistrer un fichier texte sous l'extension .bat) avec ce qui suit. Comme point de départ, cela s'imprimera à l'invite de commande, par exemple, "en-us" (sans guillemets) Vous pouvez également utiliser la variable! VERBOSE_SYSTEM_LOCALE! pour les paramètres régionaux lisibles par l'homme, par exemple l'anglais (États-Unis)
@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!
)
)
En fait, vos propositions échouent, car elles reposent sur la recherche d'une chaîne (" System Locale ") qui change en fonction des paramètres régionaux actuels! Sur mon Win10Pro français, la chaîne est " Option régionale du système " (avec une lettre accentuée, ce qui est très difficile à gérer correctement dans un fichier CMD).
J'ai fait quelques tests, et il semble, sur mon système, que les lignes concernant les paramètres régionaux dans la sortie systeminfo sont les seules à contenir un caractère point-virgule (";"):
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)
Sur la base de cela (qui peut ne pas être vrai sur d'autres systèmes avec des langues différentes), j'ai codé ce 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
)
)
Le résultat de mon script sur MON système est:
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)
Soyez averti, cependant, que les trois variables d'environnement n'existent qu'à l'intérieur du script, elles ne persistent PAS dans l'environnement CMD après la fin du script (pas de commande d' exportation comme dans * nix).
moi encore.
J'ai découvert une légère amélioration de mon script. En utilisant SETX, on peut stocker des variables d'environnement dans l'environnement USER pour les futures fenêtres CMD à utiliser (comme indiqué dans SETX /? Deuxième remarque).
Ensuite , le get_locale.cmd scénario devient:
@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
)
)
Pour la variable VERBOSE_SYSTEM_LOCALE, étant donné que la valeur est peut-être longue de plusieurs mots, il est nécessaire de mettre %% C entre guillemets afin que SETX ne reçoive qu'un seul paramètre comme prévu.
Maintenant, dans toute nouvelle fenêtre CMD, ces valeurs seront disponibles:
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: Ce serait bien si d'autres contributeurs d'autres pays avec d'autres langues pouvaient confirmer que la recherche de points-virgules ';' fonctionne sur leurs systèmes Windows. Merci d'avance!
System Locale: en-gb;English (United Kingdom)