如何在Windows中程序化启动Shell并预填充代码且不自动执行?
如何在Windows中程序化启动Shell并预填充代码且不自动执行?
当然可以实现!我之前做自动化工具的时候刚好研究过这个需求,给你分享几个实用的方法,都是Windows环境下直接能用的:
方法1:用VBScript模拟输入
VBScript的SendKeys功能可以完美模拟用户在键盘上的输入操作,步骤很简单:
- 新建一个文本文件,把下面的代码粘贴进去,保存为
prepopulate_cmd.vbs(注意后缀是.vbs):
Set WshShell = WScript.CreateObject("WScript.Shell") ' 启动CMD窗口,要是想启动PowerShell就换成powershell.exe WshShell.Run "cmd.exe" ' 给窗口留一点加载时间,系统慢的话可以把500改成1000(单位是毫秒) WScript.Sleep 500 ' 把你要预填充的命令写在这里,比如下面的dir C:\Windows WshShell.SendKeys "dir C:\Windows"
- 双击这个vbs文件,就能看到CMD窗口弹出,并且输入框里已经填好了指定命令,按回车才会执行。
如果需要预填充多行命令(用户按回车后会依次执行),可以用+{ENTER}模拟Shift+Enter换行(不会触发执行):
WshShell.SendKeys "cd C:\temp+{ENTER}echo Hello World+{ENTER}pause"
方法2:用PowerShell实现同样的效果
如果你更习惯PowerShell,也可以用它调用COM对象来做同样的事:
$wshell = New-Object -ComObject WScript.Shell # 启动Windows Terminal的话,把powershell.exe换成wt.exe $wshell.Run("powershell.exe") # 等待窗口加载 Start-Sleep -Milliseconds 500 # 预填充PowerShell命令,比如获取系统服务 $wshell.SendKeys("Get-Service | Where-Object {$_.Status -eq 'Running'}")
运行这个脚本,PowerShell窗口会自动弹出并填好命令,完全由用户决定什么时候执行。
注意事项
- 窗口加载时间:不同系统的启动速度不一样,如果发现预填充没生效,把Sleep的时间调长一点就行。
- 特殊字符处理:如果你的命令里包含
{、}、+这些特殊符号,需要用花括号括起来,比如要输入echo {test},得写成SendKeys "echo {{test}}"。 - 焦点问题:脚本执行时尽量不要操作其他窗口,不然
SendKeys可能会把内容发送到错误的窗口里。
备注:内容来源于stack exchange,提问作者ETL
相关产品推荐
相关产品推荐

