如何将Send To菜单选中的文件名传递给PowerShell脚本
PowerShell脚本接收SendTo菜单选中文件的实现方法
核心原理
当你在资源管理器选中文件、通过「发送到」菜单触发快捷方式时,Windows会自动将所有选中文件的完整绝对路径作为位置参数,按顺序传递给快捷方式指向的目标程序,脚本可以直接读取这些参数获取选中的文件列表,不需要额外调用COM对象或者读取注册表。
步骤1:修改PowerShell脚本,添加参数接收逻辑
在脚本最开头添加参数接收块,替换原有遍历当前目录的逻辑即可,参考代码如下:
# 接收系统传递过来的选中文件路径列表 param( [Parameter(ValueFromRemainingArguments = $true)] [string[]]$SelectedFiles ) # 异常处理:直接双击脚本运行时无传入文件,直接提示退出 if (-not $SelectedFiles) { Write-Host "请通过右键菜单-发送到 触发本脚本" timeout /t 2 >nul exit } # 原有逻辑:提示输入搜索关键词 $searchKey = Read-Host "请输入要检索的字符串" # 遍历选中的文件执行检索 foreach ($file in $SelectedFiles) { # 过滤非.log/.txt格式的误选文件 $fileExt = [System.IO.Path]::GetExtension($file).ToLower() if ($fileExt -notin '.log','.txt') { Write-Warning "跳过非文本/日志文件:$file" continue } Write-Host "`n===== 检索文件:$file =====" -ForegroundColor Cyan # 替换为你原有的检索逻辑即可,示例用Select-String做匹配 Select-String -Path $file -Pattern $searchKey -SimpleMatch | ForEach-Object { Write-Host "行号$($_.LineNumber):$($_.Line.Trim())" } } Read-Host "`n检索完成,按回车退出"
步骤2:修正SendTo快捷方式的配置(最容易出错的环节)
如果快捷方式配置错误,参数不会正常传递给脚本,按以下步骤检查:
- 按
Win+R组合键,输入shell:SendTo后回车,直接打开「发送到」菜单对应的文件夹 - 找到你之前创建的脚本快捷方式,右键打开「属性」面板
- 「目标」输入框必须按以下格式填写,不能只填脚本路径:
powershell.exe -ExecutionPolicy Bypass -File "你的PS1脚本的完整绝对路径"注意:
-File参数必须放在脚本路径前面,不要在命令末尾手动加任何其他参数,Windows会自动把选中文件的路径追加在命令后面 - 「起始位置」输入框留空即可,不需要填写内容
- 保存配置后即可正常使用
注意事项
- 支持同时选中多个文件触发,所有选中的文件路径都会自动传入
$SelectedFiles数组 - 路径/文件名包含空格、中文等特殊字符时不需要额外处理,Windows会自动做转义,PowerShell可正常识别
- 原有检索逻辑不需要改动,只需要把原来遍历当前目录获取文件的代码,替换为遍历
$SelectedFiles数组即可
内容的提问来源于stack exchange,提问作者Scott Chadwick
相关产品推荐
相关产品推荐

