You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本实现打开TXT文件并全选复制的问题求助

我明白你的问题了——你想用PowerShell脚本打开txt文件后自动全选复制内容,但SendKeys总是不生效对吧?这其实是因为几个容易忽略的小问题,咱们一步步解决:

问题根源

  1. 执行时机不对:Invoke-Item启动记事本后,脚本会立刻往下执行SendKeys,这时候记事本窗口可能还没完全加载,甚至没成为当前活动窗口,按键自然发错了地方。
  2. 缺少窗口激活:你之前的代码里既没创建WshShell对象,也没确保把按键发送到记事本窗口,SendKeys默认只会发给当前活动窗口,大概率不是刚打开的记事本。

解决方案脚本

直接用下面的代码,我帮你把每一步都做了控制:

# 创建用于发送按键的WScript.Shell对象
$wshell = New-Object -ComObject WScript.Shell

# 直接启动记事本并打开目标文件(用Start-Process比Invoke-Item更可控)
Start-Process notepad.exe -ArgumentList "adddata.txt"

# 给窗口留足够加载时间(如果文件很大可以适当延长秒数)
Start-Sleep -Seconds 1

# 激活记事本窗口(注意标题要匹配你的系统语言,中文是"文件名 - 记事本",英文是"文件名 - Notepad")
$wshell.AppActivate("adddata.txt - 记事本")

# 发送全选快捷键Ctrl+A,短暂延迟确保全选完成后再发送复制快捷键Ctrl+C
$wshell.SendKeys("^a")
Start-Sleep -Milliseconds 100
$wshell.SendKeys("^c")

# 可选:释放COM对象避免内存残留
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wshell) | Out-Null

关键细节说明

  • 用Start-Process而非Invoke-Item:直接指定notepad.exe可以避免依赖系统文件关联,确保打开的是记事本而不是其他文本编辑器。
  • 窗口激活AppActivate:必须明确指定目标窗口标题,保证按键发送到正确的窗口。如果你的文件在非当前目录,要写完整路径,比如"C:\docs\adddata.txt",标题也会对应变成完整路径开头的格式。
  • 延迟的必要性:系统打开窗口和加载文件需要时间,短延迟能避免操作“抢跑”导致失效。

内容的提问来源于stack exchange,提问作者hangejj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:52:52