从 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 存储 的相关文章

  • 如何获取每个StorageVolume的可用大小和总大小?

    背景 谷歌 悲伤 计划破坏存储权限 https www xda developers com android q storage access framework scoped storage 这样应用程序将无法使用标准文件 API 和文件
  • AdapterContextMenuInfo 始终为 null

    我尝试通过 android 开发文档中的书来做到这一点 this didn t create a menu i don t know why registerForContextMenu getListView setListAdapter
  • “(”字符在 PowerShell 中不起作用

    我无法让它发挥作用 它不喜欢 字符 我如何解决它 Dir Rename Item NewName name replace 如何在 PowerShell 中处理这种类型的特殊字符 vonPryze 对问题的确切原因做了很好的解释 但还有一个
  • 按下按钮时应用不同的样式

    有没有办法在按下按钮时将样式应用于按钮 如果我有一种风格样式 xml
  • Android Q:file.mkdirs() 返回 false

    我们有一个应用程序 使用外部存储来存储一些临时文件 图像 二进制数据 该代码已经运行了几年 直到最近才发生重大变化 在 Android Q 上它不起作用 File f new File Environment getExternalStor
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • 如何在我现有的 Android 应用程序中使用 Telegram API(包括聊天应用程序)?

    我想使用 telegram API 在我现有的 Android 应用程序中开发聊天功能 我不知道如何实施 我认为 看看Telegram 数据库库 测试版 从这里TDLib https core telegram org tdlib 俄语 但
  • 当它的父级是 ConstraintLayout 时设计 CardView 吗?

    我在编辑包含Relativelayout的Cardview内的RelativeLayout时搞砸了 ConstraintLayout会将相对布局的wrap content更改为0并添加工具 layout editor absoluteX 1
  • Android Eclipse 上的 Web 服务

    我是 android eclipse java 的新手 事实上这个论坛也是如此 有人遇到过这种情况吗 从用户那里获取输入并通过使用 android eclipse 中的 Web 服务来显示适当的结果 有可用的示例吗 非常感谢 我正在发布教程
  • Android:后台Activity可以执行代码吗?

    后台的活动是否被视为 正在运行 并且可以执行代码 还是处于挂起状态 他们暂停了 活动生命周期 http developer android com reference android app Activity html ActivityLi
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • powershell 中的展开存档无法提取嵌套文件夹和文件

    我有以下简单的 powershell 将 zip 文件夹 包含其他文件夹和仅日志文件 提取到目的地 FolderPath C Temp Whatever Expand Archive Path FolderPath logs zip Des
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • 如何在 Android 中从 WorkManager 取消工作?

    我已经保存了 WorkManagerUUID转换成String在领域数据库中 这是代码 Constraints constraints new Constraints Builder setRequiredNetworkType Netwo
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 上网本上可以进行Android开发吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用我的上网本进行 Android 开发 但是当我尝试使用 Eclipse 运行 SDK 时 没有加载任何内容 上网本对于 Android 开发来
  • 如何检查 Android 中的同步设置

    我正在构建一个 Android 应用程序 我需要检查设备中注册的每个单独帐户的同步设置 我知道我可以通过 ContentResolver 类来做到这一点 但我遇到了一些问题 我已设法获取设备上所有帐户的列表 但我不知道在运行时从哪里获取特定
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • “%”(百分比)在 PowerShell 中起什么作用?

    操作似乎在管道之后启动脚本块 尽管about Script Blocks http technet microsoft com en us library hh847893 aspx表示 不是必需的 这些都工作得很好 get childit
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A

随机推荐