通过.bat文件添加/删除键盘输入语言

8
我现在使用win7已经有一段时间了,它经常会弄乱我的键盘语言,我必须远程添加三种键盘语言,应用并将它们删除。所以,我想知道是否有一种方法可以通过一个.bat文件自动完成这个过程(添加3种特定的键盘语言,然后立即将它们删除)。然而,我几乎不了解.bat命令,所以有没有人知道是否可以通过.bat文件实现,并且如果可以,应该使用哪些命令?
谢谢您提前的帮助, 乔治。

我不知道是否有命令行界面来控制键盘语言 - 但使用宏程序的键盘宏可能是一种解决方案。 AutoIt是另一个可以自动化键盘和鼠标移动的工具。 - foxidrive
不确定这是否有帮助:http://jekkilekki.wordpress.com/2009/01/05/changing-os-languages-in-windows-xp/ - npocmaka
5个回答

8

它是可能的。

http://blogs.msdn.com/b/shawnste/archive/2007/04/12/configuring-international-settings-from-the-command-line.aspx

http://msdn.microsoft.com/en-us/goglobal/bb964650#eyb

运行XML以添加键盘语言的命令行示例:

control intl.cpl,, /f:"%CD%\AddKeyboardLanguage.xml"

AddKeyboardLanguage.xml 用于添加中文键盘语言的示例:

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"> 
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/></gs:UserList> 
<gs:InputPreferences> 

<gs:InputLanguageID Action="add" ID="0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{FA550B04-5AD7-411F-A5AC-CA038EC515D7}"/>

</gs:InputPreferences>
</gs:GlobalizationServices>

移除键盘语言的示例 RemoveKeyboardLanguage.xml:

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"> 
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/></gs:UserList> 
<gs:InputPreferences> 

<gs:InputLanguageID Action="remove" ID="0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{FA550B04-5AD7-411F-A5AC-CA038EC515D7}"/>

</gs:InputPreferences>
</gs:GlobalizationServices>

批处理文件用于添加或删除键盘语言(保存为AddRemWindowsChinese.bat):

@echo off
if "%1"=="" echo ERROR: Missing [add]/[remove] parameter & goto :USAGE
if /i %1==add (
    echo control intl.cpl,, /f:"%CD%\AddWindowsChinese.xml"
    control intl.cpl,, /f:"%CD%\AddWindowsChinese.xml"
    IF ERRORLEVEL 1 echo An error occured ! && goto :ERROR
)
if /i %1==remove (
echo %CD%
    echo control intl.cpl,, /f:"%CD%\RemoveWindowsChinese.xml"
    control intl.cpl,, /f:"%CD%\RemoveWindowsChinese.xml"
    IF ERRORLEVEL 1 echo An error occured ! && goto :ERROR
)
GOTO :END

:USAGE
echo.
echo USAGE:
echo AddRemWindowsChinese.bat [add ^| remove]
echo.
pause
goto :END

:ERROR

:END

1
对我来说,在Win7上它运行得非常好。我并不是特别回复你,但由于我需要相同的解决方案,并在研究过程中偶然发现了你的问题,我认为这可能对未来的其他人有用。 - Ying
只是为了记录:你为什么要在你的 .xml 文件中添加 <!--ch-Google--> - PeterCo
我认为它可以被删除。这只是一个注释。 - Ying
根据PeterCo的反馈,已删除注释。 - Ying

5
我也遇到了同样的问题 - 自动添加了"en-US",我不得不先添加 "en-US",然后再删除它才能消除布局。即使使用批处理文件,我发现你不能只是删除它,你必须先添加该布局(即使它已经显示在键盘布局列表中),才能像手动移除一样将其删除。
因此,"Remove_en-US.xml" 文件首先添加该布局,然后再将其删除:
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">

    <!--User List-->
    <gs:UserList>
        <gs:User UserID="Current"/>
    </gs:UserList>

    <!--input preferences--> 
    <gs:InputPreferences>
        <!--add en-US keyboard input-->
        <gs:InputLanguageID Action="add" ID="0409:00000409"/>
        <!--remove en-US keyboard input-->
        <gs:InputLanguageID Action="remove" ID="0409:00000409"/>
    </gs:InputPreferences>

</gs:GlobalizationServices>

Remove_en-US.bat:

control intl.cpl,, /f:"%CD%\Add_en-US.xml"

在这里,0409区域设置 ID00000409是键盘布局值。有关区域设置 ID:键盘布局值列表,请参见https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/hh825682(v=win.10)

3

使用 @Ying 的技巧/链接... 我制作了一个 pt.xml 文件:

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">

    <!--User List-->
    <gs:UserList>
        <gs:User UserID="Current"/>
    </gs:UserList>

    <!--input preferences--> 
    <gs:InputPreferences>
        <!--add pt-BR keyboard input and set as default-->
        <gs:InputLanguageID Action="add" ID="0416:00010416" Default="true"/>
    </gs:InputPreferences>

</gs:GlobalizationServices>

然后只需创建一个包含以下命令的 .bat 文件:

control intl.cpl,, /f:"%CD%\pt.xml"

双击它,它应该立即运行!

非常感谢您提供这个具体的例子。关键提示是:在/f:后面不要省略双引号,否则control.exe命令会在Windows 7上默默失败。 - Jimm Chen

1
键盘语言存储在注册表中的HKEY_CURRENT_USER\Keyboard Layout下。您可以在批处理文件中使用REG.EXE添加/修改/删除注册表键。 REG.EXE不支持远程更改HKEY_CURRENT_USER注册表键,因此必须从受影响的计算机上运行该文件。不过,我们可能不需要这么做。以下是我建议的做法:当您的计算机正常工作时,通过单击开始按钮并在运行框中键入CMD来进入CMD提示符。从CMD提示符中,键入:
  REG QUERY "HKCU\Keyboard Layout" /s

这将向您展示所有正常情况下注册表键应该看起来是什么样子。现在,通过输入以下内容,对其进行快照并将其存储在文件中:
  REG EXPORT "HKCU\Keyboard Layout" KeyboardLayout.reg

这将在您的CMD提示符所在的任何目录中创建KeyboardLayout.reg文件。我不确定为什么您需要添加3种特定语言,然后再删除它们以恢复正常工作,但我有一种感觉,只需将注册表设置回工作时的状态即可解决问题。下次出现此问题时,远程浏览到KeyboardLayout.reg文件的位置,然后双击它。它会告诉您该键已更新,请点击确定。看看是否可以解决问题。如果不能,请重新启动计算机,看看是否可以。如果仍然无法使用,请发表评论,我会告诉您下一步应该做什么。

这是不可行的。安装像“简体中文”这样的键盘需要安装大约80 MB的字体等内容。注册表键的导出和导入无法完成此操作。 - Thomas Weller

0

还有一种PowerShell方法。这里是一个简单的批处理程序,用于删除en-US和de-DE布局。

@echo off
for %%q in (en-US de-DE) do ^
powershell -c "$ll=Get-WinUserLanguageList; $ll.add('%%q'); Set-WinUserLanguageList $ll -force;" & ^
powershell -c "$ll=Get-WinUserLanguageList; $ll.remove(($ll |? LanguageTag -like '%%q')); Set-WinUserLanguageList $ll -force;"

首先我们需要添加它们,然后再删除。对我来说效果不错。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接