簡體   English   中英

批處理 - 獲取當前運行系統的系統語言

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

我正在嘗試使用wmic獲取當前設置的系統語言,但我不知道為什么我的代碼在這里有點“損壞”......
wmic的回讀信息包含大量空格和CRLF´s 因此,我想在循環中刪除所有內容,但在我的示例中語法不正確......

@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

你看到問題了嗎?

非常感謝;-)

=拆分,然后再循環一個以刪除CRLF

例子:

@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%

雖然不是對您問題的直接回答,但我決定將其發布為您自己,否則未來的用戶可能會發現它在類似情況下很有用。

@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

包含最后兩行是為了希望顯示已定義的任何變量的名稱及其值。 第一行是確保在枚舉之前沒有預定義這些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM