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

如何通过PowerShell检测文件管理器选中文件并实现复制操作

可行方案:用PowerShell检测文件资源管理器选中的文件并复制

当然有办法实现这个需求!核心思路是借助Windows的Shell.Application COM对象来读取文件资源管理器窗口里的选中项,再用PowerShell自带的复制命令完成操作。下面是具体的实现步骤和脚本:

1. 核心逻辑说明

Windows的Shell.Application对象可以访问系统中所有打开的资源管理器实例,我们可以通过它遍历窗口、识别文件夹类型的窗口,最后提取其中用户选中的文件/文件夹路径。

2. 完整PowerShell脚本

# 替换成你需要的目标文件夹路径
$targetFolder = "D:\Your\Target\Directory"

# 创建Shell.Application对象
$shellApp = New-Object -ComObject Shell.Application

# 获取所有打开的Shell窗口(包含资源管理器和IE等,后续会过滤)
$allWindows = $shellApp.Windows()

# 收集所有选中的文件/文件夹路径
$selectedPaths = @()
foreach ($window in $allWindows) {
    # 只处理本地文件夹窗口(排除网页、网络共享等非本地路径)
    if ($window.LocationURL -match '^file:///') {
        $selectedItems = $window.Document.SelectedItems()
        foreach ($item in $selectedItems) {
            # 将Shell对象路径转换为本地可识别的路径
            $selectedPaths += $item.Path
        }
    }
}

# 处理无选中项的情况
if ($selectedPaths.Count -eq 0) {
    Write-Host "未检测到任何选中的文件或文件夹,请先在资源管理器中选择内容!"
    exit 1
}

# 执行复制操作
try {
    Copy-Item -Path $selectedPaths -Destination $targetFolder -Recurse -Force
    Write-Host "✅ 成功复制 $($selectedPaths.Count) 个项目到 $targetFolder"
} catch {
    Write-Host "❌ 复制失败:$_"
    exit 1
}

# 释放COM对象,避免内存泄漏
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($shellApp) | Out-Null

3. 使用步骤

  1. 打开文件资源管理器,选中你需要复制的文件/文件夹
  2. 修改脚本里的$targetFolder为你的目标存储路径
  3. 运行这个PowerShell脚本即可自动完成复制

4. 额外提示

  • 如果目标路径是系统目录(比如C:\Windows),需要以管理员身份运行PowerShell
  • 脚本会检测所有打开的资源管理器窗口中的选中项,如果多个窗口都有选中内容,会一并复制
  • 若只想处理当前激活的资源管理器窗口,可以在遍历窗口时增加判断:if ($window.Visible -and $window.Document.Folder.Self.IsFileSystem),结合前台进程识别来精准定位当前窗口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:17:04