修改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脚本改动说明
- 删掉了不需要的
$targetFolder(原目标复制目录)和$filter参数,毕竟我们不再需要筛选或复制文件 - 移除了所有和文件复制相关的逻辑:包括循环处理文件、进度条、目标目录创建等冗余代码
- 核心新增
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
批处理改动说明
- 修改窗口标题为更贴合当前功能的名称
- 移除了调用PS1时多余的
-targetFolder和-filter参数,因为新的PS1脚本已经不需要这些 - 简化了命令逻辑,只保留核心的脚本调用部分
测试注意事项
确保你的MTP设备已经连接到电脑,并且处于可访问状态(比如手机已经解锁并允许文件访问),运行批处理文件后,应该会直接弹出资源管理器窗口,打开设备上指定的Card\DCIM\Camera文件夹。
备注:内容来源于stack exchange,提问作者bat_cmd
相关产品推荐
相关产品推荐

