简体   繁体   English

批处理 - 获取当前运行系统的系统语言

[英]Batch - Get System Language of current running System

I am trying to get the current setted system-language under use of wmic , but i don´t know why my code here is kind of "broken"...我正在尝试使用wmic获取当前设置的系统语言,但我不知道为什么我的代码在这里有点“损坏”......
The readback info from wmic contains a lot of spaces and CRLF´s . wmic的回读信息包含大量空格和CRLF´s Therefore i wanted to cut all that out in the loop, but the syntax is not proper in my example...因此,我想在循环中删除所有内容,但在我的示例中语法不正确......

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
:MAIN
setlocal
call :Get_System_Language "lang"
echo lang=%lang%
pause
exit /b 0

:Get_System_Language
setlocal
::Windows Language Code Identifier
::1031 German Germany
::2057 English United Kingdom
::1033 English United States
set "language=NUL"
set /a num_languages=3
for /f "tokens=1,2 delims==" %%a in ('wmic os get OSLanguage /Value') do (
    if "%%a" equ "OSLanguage" (
        set "item_tmp=%%b"
        set "value=!item_tmp:=!"
        if "!value!" equ "1031" (
            set "language=german_germany"
        )
        if "!value!" equ "2057" (
            set "language=english_british"
        )
        if "!value!" equ "1033" (
            set "language=english_american"
        )
        (endlocal
            if "%~1" neq "" (set "%~1=!language!")
        )
        exit /b 0
    )
)
exit /b 1

Do you see the Problem?你看到问题了吗?

Thank´sa lot;-)非常感谢;-)

Split by = then one more loop to remove CRLF=拆分,然后再循环一个以删除CRLF

Example:例子:

@echo off
for /f "tokens=2*delims==" %%i in ('wmic os get OSLanguage /value') do for %%f in (%%i) do (
    if "%%~f" == "1031" set "Lang=german_germany"
    if "%%~f" == "2057" set "Lang=english_british"
    if "%%~f" == "1033" set "Lang=english_american"
)
echo %Lang%

Whilst not a direct answer to your question, I have decided to post this as yourself or future users may find it useful in a similar situation.虽然不是对您问题的直接回答,但我决定将其发布为您自己,否则未来的用户可能会发现它在类似情况下很有用。

@For /F "Delims==" %%G In ("(Set $) 2>NUL") Do @Set "%%G="
@For /F "Tokens=1,* Delims=: " %%G In ('
 %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command
 "[CultureInfo]::InstalledUICulture | Select-Object"^
 " LCID, KeyboardLayoutId, Name, DisplayName, ThreeLetterWindowsLanguageName"'
) Do @Set "$%%G=%%H"
@(Set $) 2>NUL
@Pause

The last two lines are included to hopefully display the names of any variables defined, and their values.包含最后两行是为了希望显示已定义的任何变量的名称及其值。 The first line is to ensure that none of those are predefined before enumerating.第一行是确保在枚举之前没有预定义这些。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM