从 PowerShell 使用 System.IO 访问 MTP 存储

2024-01-08

我正在尝试访问 MTP 设备存储以自动执行文件复制、备份等。 如果 Windows 资源管理器能够打开并浏览 Android 设备内部存储和连接的 SD 卡,我如何使用 PowerShell 访问这些存储?

我发现了很多提示,例如“获取设备 ID 并使用 WMI” https://stackoverflow.com/questions/9531399/browse-files-on-camera-using-powershell

Windows 资源管理器使用什么方式打开和浏览特别是 Android 的存储?

是否可以像这里一样使用一些 System.IO 类? https://stackoverflow.com/questions/6500277/how-can-i-create-a-powershell-script-to-copy-a-file-to-a-usb-flash-drive

$drives = [System.IO.DriveInfo]::GetDrives()
$r = $drives | Where-Object { $_.DriveType -eq 'Removable' -and $_.IsReady }
if ($r) {
    return @($r)[-1]
}

我可以使用以下命令访问和浏览本地 MTP (android) 设备的内容:

$WIAdialog = New-Object -ComObject “WIA.CommonDialog”
$Device = $WIAdialog.ShowSelectDevice()
$Device = $WIAdialog.ShowAcquireImage()
$Device = $WIAdialog.ShowAcquisitionWizard()
$Device = $WIAdialog.ShowDeviceProperties()
$Device = $WIAdialog.ShowItemProperties()
$Device = $WIAdialog.ShowPhotoPrintingWizard()
$Device = $WIAdialog.ShowSelectItems()
$Device = $WIAdialog.ShowTransfer()

但是这段代码正在加载有关存储图片的信息,即使在本地计算机上也太慢了。是否可以避免加载有关图片的信息以加快加载和访问远程连接设备的速度?

预先感谢您提供任何信息和提示!


这是我在 Stack Overflow (Stack Exchange) 上的第一个回答,请考虑。

我正在处理同样的问题 - 我希望能够在 PowerShell 中使用 Android 内部存储,就像在资源管理器中一样。 我唯一的建议是我们可以安装 FTP 服务器(我最喜欢的是FTP服务器 https://play.google.com/store/apps/details?id=com.theolivetree.ftpserver) 并这样排序。到目前为止我发现的是超级用户的这些答案:
打开命令提示符以访问 USB 连接的 Android 手机的文件夹 https://android.stackexchange.com/questions/57429/open-command-prompt-to-access-folders-of-a-usb-connected-android-phone
13 票并被接受

为了给可移动设备分配驱动器号,该设备必须支持 UMS(USB 大容量存储)协议。不幸的是,大多数较新的 Android 手机,尤其是那些没有可移动 SD 卡的手机,不支持 UMS。相反,它们支持 MTP(媒体传输协议)和 PTP(图片传输协议)协议。在此类设备中,无法将存储映射为 Windows 中的驱动器。

在此 Superuser.com 上查看更多详细信息问题:如何在 Windows 中通过命令行访问 MTP 设备? https://superuser.com/questions/369959/how-do-i-access-mtp-devices-on-the-command-line-in-windows

24 票并已接受

不幸的是,MTP 公开的 API 与普通文件系统 API 有很大不同。因此,将 MTP 设备公开为读/写文件系统是不可能的。主要原因:

维基百科说:

MTP 和 PTP 标准都不允许直接修改对象。相反,修改后的对象必须完整地重新上传,这对于大型对象来说可能需要很长时间。对于 PTP/MTP,必须在打开阶段知道文件大小。

您的常见文件复制程序只是打开源文件和目标文件,并将数据从源文件分块复制到目标。这不适用于 MTP,因为您需要使用 MTP 特殊函数,并且通用文件系统原语(读、查找、写)不可用。

还有其他限制。例如,MTP 设备上可以同时读取或写入的文件数量受到严格限制。该设备的行为根本不像文件系统。

我认为 MTP 设备的只读文件系统驱动程序可能是可能的,但由于上述问题,它的用处很小,因此没有人费心去创建它。

编辑于 2012 年 5 月 12 日 6:33 彼得·莫滕森 8,075

于 2012 年 1 月 10 日 20:08 回复 海姆格 15.9k

只读文件系统驱动程序现在似乎已存在: ptpdrive.com – Arne de Bruijn Sep 12 '13 at 12:25

ptpdrive.com http://ptpdrive.com

事实上,这并不是“不可能”。当你考虑到我在 Linux 上有 gphotofs 和 mtpfs 作为完全读/写的 FUSE 文件系统时,它很有可能在 Windows 下作为“驱动器号”来实现这一点......他们只是没有让它可用或容易。 – Svartalf 2014 年 5 月 9 日 19:57

尽管如此,在某些选定的三星和索尼 Android 设备上,可以仅为外部存储(SD 卡)启用 UMS 模式。 看.

此外,如果您的目标只是通过命令提示符将文件复制到 Android 设备或从 Android 设备复制文件,ADB 将允许您这样做。该实用程序是 Android SDK 工具的一部分。您需要为您的 Android 手机安装 USB 驱动程序,在手机的开发者设置中激活 USB 调试,并授权 PC 调试手机(通过设备上的提示)。完成后,您将能够使用adb push and adb pull复制文件和目录的命令,以及各种 Linux shell 命令adb shell <command> (e.g.adb shell ls /sdcard/) 导航手机上的目录结构。

2017 年 3 月 20 日 10:18 编辑
社区 ❖
1
于 2013 年 11 月 21 日 16:14 回复
Chahk

18.5k

上面答案中提到的应用程序在我看来非常有限,因为它的年龄。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 PowerShell 使用 System.IO 访问 MTP 存储 的相关文章

  • 如何在android中批量插入sqlite

    我正在使用 SQLiteOpenHelper 进行数据插入 我需要插入2500个id和2500个名字 所以花费了太多时间 请任何人帮助我如何减少插入时间 我们可以一次插入多条记录吗 任何人都可以帮助我 先感谢您 代码 public clas
  • 对话框片段嵌入取决于设备

    在我的应用程序中 用户从联系人或通话记录中选择电话号码 选择联系人非常简单 并且在手机和平 板电脑上都可以很好地工作 i e 在手机上会弹出新的全屏活动 在桌子上我会看到带有联系人列表的漂亮弹出对话框 似乎无法从通话记录中选择电话号码 因此
  • 当前版本的Android Gradle插件不支持按需配置

    升级到 Android Studio 3 1 2 后 出现以下错误 当前版本的 Android Gradle 插件不支持按需配置 因为您使用的是 Gradle 4 6 或更高版本 建议 通过在 gradle properties 文件中设置
  • 使用 Powershell SQL 将数据提取到 Excel

    我想使用 powershell 将数据从 SQL Server 提取到新的 excel 文件 对于小型数据集 我的代码可以工作 但某些表的行数超过 100 000 行 这将需要很长时间 我不在 SQl 服务器中使用该实用程序的原因是因为我想
  • 如何在 Jetpack compose 中制作 FlipCard 动画

    我有一个现有的应用程序 我在其中使用 XML 中的 Objectanimator 实现了 FlipCard 动画 如下所示 如果我点击一张卡片 它会水平翻转 但现在我想将其迁移到 jetpack compose 那么jetpack comp
  • 使用Picasso从url保存图像?

    我正在尝试使用 API Picasso 保存图像 为了做到这一点 我正在尝试使用Target保存 但我无法完成这项工作 我怎么能这样做呢 Trying save image public static void imageDownload
  • 有人可以给出一个 android 中 webview 实现的确切例子吗

    嗨 我正在使用开发 Android 应用程序WebView执行 我跟着官方安卓教程 http developer android com resources tutorials views hello webview html 在 Ecli
  • 无法在 Android 上编译 avahi

    我是交叉编译的新手 我被分配了使用android补丁的任务http avahi org ticket 354 http avahi org ticket 354将 avahi 核心编译为 android ndk build avahi co
  • AltBeacon 服务位于单独的 Android 进程中

    我需要帮助 有一个适用于 Xamarin Android 的应用程序 在其中 启动了一个与 AltBeacon 库配合使用的服务 在此服务中 创建了一个线程 在该线程中不断扫描信标 服务以 StartForeground 启动 该服务应该有
  • Android WebView文件上传

    我正在开发一个 Android 应用程序 基本上它是一个WebView和一个进度条 Facebook 的移动网站 m facebook com 已加载到WebView 当我单击 选择文件 按钮上传图像时 没有任何反应 我已经尝试了所有的解决
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • 垂直从上到下线手势检测器

    我用的是 手势工具 注意到对于垂直从上到下的线无法检测 因为我在代码中使用生成的手势文件 如下所示 但无法检测垂直从上到下的线手势检测 import java util ArrayList import android app Activi
  • Android:如果任务管理器终止,则重新调用应用程序

    如果应用程序线程被任务管理器杀死 则应用程序线程将关闭 需要重新调用应用程序 就像它被其他应用程序或任务管理器杀死一样 任何想法 您必须使用 START STICKY 命令运行后台服务 只需扩展 Service 并重写 onCommand
  • 将触摸事件从 NestedScrollView 传递到父视图

    我在 NestedScrollView 下方有一个 ViewPager 宽度一些顶部填充 以及 ClipToPadding false 和透明背景 如图像 我的 ViewPager 无法获取触摸事件并且无法工作 我怎么解决这个问题 我无法更
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命
  • 如果我的应用程序安装在 SD 卡上,私人数据也在那里吗?

    我假设应用程序的私有数据 例如 SharedPreferences 和 SQLite 数据库 位于手机的内部存储而不是 SD 卡上 即使应用程序本身安装在 SD 卡上 我在任何地方都找不到对此的简单明确的确认 有人可以确认一下吗 是的 私有
  • Android Jetpack Compose 尺寸随持续时间变化的动画

    如何在 Jetpack Compose 中添加内容大小更改动画的持续时间 尝试使用Modifier animateContentSize 并通过动画规格具有持续时间 但它只是突然进入或退出 没有观察到持续时间 Column Modifier
  • 如何解决android程序中的警告“从不本地读取”

    为什么我收到警告说 The field testscreen ScaleAnimToShow mVanishAfter is never read locally testscreen java testscreen src com tes
  • 在 Qt 中构建 Android 项目不再有效

    所以我对 Android SDK NDK 和 Apache Ant 进行了一些更新 现在我无法构建任何 Android 项目 我收到一条警告 然后它说找不到 build xml 文件 错误 Warning Android platform

随机推荐