8

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

提前谢谢你,乔治。

4

5 回答 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
于 2013-08-22T08:04:50.067 回答
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"

这里,0409locale ID并且00000409是键盘布局值。有关列表,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)

于 2018-01-07T22:58:30.857 回答
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"

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

于 2016-08-26T09:48:37.947 回答
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 文件的位置并双击它。它会告诉您密钥已更新并单击确定。看看能不能解决。如果没有,请重新启动该计算机,然后查看是否有。如果它仍然不起作用,请回复评论,我会告诉你下一步我会做什么。

于 2013-05-14T11:56:37.550 回答
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;"

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

于 2021-01-28T23:23:16.147 回答