我现在使用win7已经有一段时间了,它经常会弄乱我的键盘语言,我必须远程添加三种键盘语言,应用并将它们删除。所以,我想知道是否有一种方法可以通过一个.bat文件自动完成这个过程(添加3种特定的键盘语言,然后立即将它们删除)。然而,我几乎不了解.bat命令,所以有没有人知道是否可以通过.bat文件实现,并且如果可以,应该使用哪些命令?
谢谢您提前的帮助, 乔治。
谢谢您提前的帮助, 乔治。
它是可能的。
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
<!--ch-Google-->
? - PeterCo<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
是区域设置 ID
,00000409
是键盘布局值。有关区域设置 ID:键盘布局值
列表,请参见https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/hh825682(v=win.10)。使用 @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 ChenHKEY_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文件的位置,然后双击它。它会告诉您该键已更新,请点击确定。看看是否可以解决问题。如果不能,请重新启动计算机,看看是否可以。如果仍然无法使用,请发表评论,我会告诉您下一步应该做什么。还有一种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;"
首先我们需要添加它们,然后再删除。对我来说效果不错。
宏程序
的键盘宏可能是一种解决方案。AutoIt
是另一个可以自动化键盘和鼠标移动的工具。 - foxidrive