我正在嘗試使用當前設定的系統語言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
你看到問題了嗎?
非常感謝 ;-)
uj5u.com熱心網友回復:
然后再拆分=
一個回圈以洗掉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%
uj5u.com熱心網友回復:
雖然不是對您問題的直接回答,但我決定將其發布為您自己,否則未來的用戶可能會發現它在類似情況下很有用。
@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
包含最后兩行是為了希望顯示已定義的任何變數的名稱及其值。第一行是確保在列舉之前沒有預定義這些。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/507908.html