【问题标题】:Add/remove keyboard languages through .bat通过 .bat 添加/删除键盘语言
【发布时间】:2013-05-06 13:24:36
【问题描述】:

现在我使用 win7 的时候,它经常把我的键盘语言弄乱,我必须远程添加 3 种键盘语言,应用,然后删除它们。所以,我想知道是否有办法通过 .bat 文件自动执行此操作(添加 3 种特定的键盘语言,然后立即删除它们)。但是,我对 .bat 命令几乎一无所知,所以有人知道这是否可以通过 .bat 文件实现,如果可以,我应该使用哪些命令?

提前谢谢你, 乔治。

【问题讨论】:

  • 我不知道是否有一个命令行界面来控制键盘语言——但是使用a macro program 的键盘宏可能是一个解决方案。 AutoIt 是另一个可以自动化键盘和鼠标移动的工具。
  • 不确定这是否有帮助:jekkilekki.wordpress.com/2009/01/05/…

标签: batch-file


【解决方案1】:

有可能。

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

【讨论】:

  • 对我来说它在 Win7 上运行良好。我没有具体回复您,但由于我需要相同的解决方案,并且在研究过程中偶然发现了您的问题,我认为它将来可能对其他人有用。
  • 仅作记录:为什么要在 .xml 文件中添加 &lt;!--ch-Google--&gt;
  • 我觉得可以去掉。这只是一个评论。
  • 根据 PeterCo 的反馈删除了评论。
【解决方案2】:

我也遇到了同样的问题 - 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"

这里,0409locale ID00000409 是键盘布局值。有关locale ID:keyboard layout value 的列表,请参阅https://docs.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"
    

    双击它,它应该立即工作!

    【讨论】:

    • 非常感谢这个具体的例子。关键提示是:您必须 not/f: 之后省略双引号对,否则,control.exe 命令会静默失败,至少在 Windows 7 上如此。
    【解决方案4】:

    键盘语言存储在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 的东西,比如字体等。注册表项导出和导入无法做到这一点。
    【解决方案5】:

    还有一个 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;"
    

    首先我们必须添加它们,然后删除它们。对我来说很好。

    【讨论】:

      猜你喜欢
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多