วิธีรับโลแคลระบบใน Windows 7 cmd


23

ฉันจะหาตำแหน่งที่ตั้งของระบบใน Windows 7 ได้อย่างไร

ฉันหมายถึงสิ่งที่ชอบ: cs_CZ.UTF-8

ฉันพยายามเขียน "locale" ในบรรทัดคำสั่ง แต่ใช้ไม่ได้ใน Windows ข้อเสนอแนะใด ๆ

คำตอบ:


17

มีไม่คำสั่งที่ระบุ (หรืออย่างน้อยไม่หนึ่งที่ฉันรู้) จะได้รับข้อมูลนี้ systeminfo.exeแต่คุณสามารถหาได้ระหว่างผู้ให้บริการโดย


3
เมื่อรัน systeminfo บนบรรทัดคำสั่งข้อมูลจำนวนมากจะถูกส่งออกไปยังหน้าจอ ข้อมูลที่เกี่ยวข้องที่จะค้นหาคือ: ตำแหน่งที่ตั้งของระบบ: en-us; อังกฤษ (สหรัฐอเมริกา) ตำแหน่งที่ตั้งที่ป้อน: en-us; อังกฤษ (สหรัฐอเมริกา)
djondal

systeminfo / FO csv | ConvertFrom-Csv | select * locale
เพียงแค่เป็นผู้เรียน

@Ogrish Man: นี่มันน่าจะเป็นคำสั่ง Powershell แต่มันไม่มีผลอะไรกับฉัน อาจเป็นเพราะส่วนหัวไม่ได้เป็นภาษาอังกฤษ systeminfo.exeทำงานด้วยตัวเองเช่นเดียวกับคำตอบของ gWaldo ใน PS
mivk


0

หากคุณต้องการสถานที่เกิดเหตุจริงเพื่อทำสิ่งอื่น ๆ แบบมีเงื่อนไขในแบตช์ไฟล์คุณสามารถสร้างแบตช์ไฟล์ (บันทึกไฟล์ข้อความเป็นนามสกุล. bat) ได้ดังต่อไปนี้ เป็นจุดเริ่มต้นสิ่งนี้จะพิมพ์ไปที่พรอมต์คำสั่งตัวอย่างเช่น "en-us" (ไม่มีเครื่องหมายอัญประกาศ) นอกจากนี้คุณยังสามารถใช้ตัวแปร! VERBOSE_SYSTEM_LOCALE! สำหรับสถานที่ที่มนุษย์สามารถอ่านได้เช่นอังกฤษ (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!        
   )
)

0

ในความเป็นจริงข้อเสนอของคุณล้มเหลวเนื่องจากพวกเขาอาศัยการค้นหาสตริง (" ตำแหน่งที่ตั้งของระบบ ") ซึ่งจะเปลี่ยนไปตามสถานที่ปัจจุบัน! ใน Win10Pro ฝรั่งเศสของฉันสตริงคือ " ตัวเลือกrégionale du système " (ด้วยตัวอักษรเน้นเสียงซึ่งเป็นเรื่องยากมากที่จะจัดการอย่างถูกต้องในไฟล์ CMD)

ฉันได้ทำการทดสอบบางอย่างและดูเหมือนว่าในระบบของฉันว่าบรรทัดเกี่ยวกับสถานที่ในผลลัพธ์ systeminfo เป็นคนเดียวที่มีอักขระเซมิโคลอน (";"):

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)

จากนั้น (ซึ่งอาจไม่เป็นจริงในระบบอื่นที่มีภาษาต่างกัน) ฉันเขียนโค้ด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
    )
)

ผลลัพธ์ของสคริปต์ของฉันในระบบของฉันคือ:

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)

ได้รับการเตือนอย่างไรก็ตามว่าตัวแปรสภาพแวดล้อมทั้งสามนั้นมีอยู่ในสคริปต์เท่านั้นพวกเขาจะไม่คงอยู่ในสภาพแวดล้อม CMD หลังจากสคริปต์สิ้นสุดลง (ไม่มีคำสั่งส่งออกเหมือนใน * nix)


0

ฉันอีกแล้ว.

ฉันค้นพบการปรับปรุงเล็กน้อยสำหรับสคริปต์ของฉัน การใช้ SETX หนึ่งสามารถเก็บตัวแปรสภาพแวดล้อมไว้ในสภาพแวดล้อม USER เพื่อใช้งาน CMD Windows ในอนาคตได้ (ตามที่ระบุในSETX /?หมายเหตุที่สอง)

จากนั้นสคริปต์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
        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
    )
)

สำหรับตัวแปร VERBOSE_SYSTEM_LOCALE เนื่องจากค่านั้นอาจมีความยาวหลายคำจึงจำเป็นต้องห่อ %% C ลงในเครื่องหมายคำพูดเพื่อให้ SETX ได้รับเพียงหนึ่งพารามิเตอร์ตามที่คาดไว้

ตอนนี้ในหน้าต่าง CMD ใหม่ใด ๆค่าเหล่านี้จะสามารถใช้ได้:

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: มันจะดีถ้าผู้มีส่วนร่วมอื่น ๆ จากประเทศอื่นที่มีภาษาอื่นสามารถยืนยันได้ว่ากำลังมองหาเครื่องหมายทวิภาค ';' ทำงานบนระบบ Windows ของพวกเขา ขอบคุณล่วงหน้า!


โปรดพิจารณารวมคำตอบนี้กับคำตอบก่อนหน้าของคุณ
kbyrd

@Seagram - ขอบคุณสำหรับสิ่งนี้ - ฉันสามารถยืนยันได้ว่ามันทำงานได้สำหรับภาษาอังกฤษ (United Kingom):System Locale: en-gb;English (United Kingdom)
SteveR
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.