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

修改Bat/PS1脚本以打开MTP设备指定文件夹的技术求助

修改Bat/PS1脚本以打开MTP设备指定文件夹的技术求助

我现在有一套能从无盘符MTP设备复制MP4文件的PowerShell脚本(CFD.ps1)和批处理文件,现在想把它们改成直接打开设备上存放MP4的目标文件夹,而不是复制文件。我已经尝试用ChatGPT修改了几十次,但始终得不到能正常运行的版本,希望有人能帮忙解决这个问题。

原脚本背景

  • 原脚本可以成功访问This PC\Galaxy A3 (2017)\Card\DCIM\Camera这个MTP路径,将其中的MP4复制到批处理所在目录
  • 因为MTP设备没有传统盘符,必须依靠Shell对象来访问设备内的文件结构

修改后的PowerShell脚本(CFD.ps1)

param([string]$deviceName,[string]$deviceFolder)

function Get-ShellProxy
{
    if( -not $global:ShellProxy)
    {
        $global:ShellProxy = new-object -com Shell.Application
    }
    $global:ShellProxy
}

function Get-Device
{
    param($deviceName)
    $shell = Get-ShellProxy
    # 17 = ssfDRIVES,对应Windows的"此电脑"虚拟文件夹
    $shellItem = $shell.NameSpace(17).self
    $device = $shellItem.GetFolder.items() | where { $_.name -eq $deviceName }
    return $device
}

function Get-SubFolder
{
    param($parent,[string]$path)
    $pathParts = @( $path.Split([system.io.path]::DirectorySeparatorChar) )
    $current = $parent
    foreach ($pathPart in $pathParts)
    {
        if ($pathPart)
        {
            $current = $current.GetFolder.items() | where { $_.Name -eq $pathPart }
        }
    }
    return $current
}

# 获取目标设备和对应子文件夹
$device = Get-Device -deviceName $deviceName
$targetFolder = Get-SubFolder -parent $device -path $deviceFolder

# 打开目标文件夹
if ($targetFolder) {
    # 通过Shell对象获取的路径直接调用资源管理器打开
    Invoke-Item $targetFolder.Path
} else {
    Write-Error "无法找到目标文件夹:$deviceName\$deviceFolder,请检查设备连接和路径配置"
}

PS1脚本改动说明

  1. 删掉了不需要的$targetFolder(原目标复制目录)和$filter参数,毕竟我们不再需要筛选或复制文件
  2. 移除了所有和文件复制相关的逻辑:包括循环处理文件、进度条、目标目录创建等冗余代码
  3. 核心新增Invoke-Item $targetFolder.Path,直接利用Shell对象获取的MTP路径调用Windows资源管理器打开目标文件夹

修改后的批处理文件

cls
@echo off
color 0f
title 打开MTP设备相机文件夹

:: --------------------------------------------------------------------------------------------------------------
:: 配置你的设备名称和文件夹路径
set DEVICE_NAME="Galaxy A3 (2017)"
set DEVICE_FOLDER_PATH="Card\DCIM\Camera"
:: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

:: 调用PowerShell脚本打开目标文件夹
start /wait /min Powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& '%~dp0CFD.ps1' -deviceName %DEVICE_NAME% -deviceFolder %DEVICE_FOLDER_PATH%"

exit

批处理改动说明

  1. 修改窗口标题为更贴合当前功能的名称
  2. 移除了调用PS1时多余的-targetFolder和-filter参数,因为新的PS1脚本已经不需要这些
  3. 简化了命令逻辑,只保留核心的脚本调用部分

测试注意事项

确保你的MTP设备已经连接到电脑,并且处于可访问状态(比如手机已经解锁并允许文件访问),运行批处理文件后,应该会直接弹出资源管理器窗口,打开设备上指定的Card\DCIM\Camera文件夹。

备注:内容来源于stack exchange,提问作者bat_cmd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:29:08