在 Windows 中,您可以通过右键单击文件并选择发送到 > 蓝牙设备来启动文件的蓝牙传输。出现“蓝牙文件传输”框,然后选择要发送到的设备。我发现通过将要发送的文件拖放到
C:\Windows\system32\fsquirt.exe
上可以达到相同的效果。
为了弄清楚当您使用 Send to 或拖放操作时 Windows 如何将文件传递给程序,我编写了以下 Python 脚本并将其快捷方式放置在
C:\Users\<username>\AppData\Roaming\Microsoft\Windows\SendTo
中。快捷方式的起始目录是 .py
文件的包含目录。 (我使用的是Python 3.6。)
#!python3
import os, sys
print(os.getcwd())
print(sys.argv)
input("Press Enter to exit...")
当我将文件拖放到快捷方式或脚本本身上以及右键单击文件并选择发送到>新快捷方式时,在所有三种情况下都会发生相同的情况:在第一行, Python 打印出
.py
文件的包含目录,在第二行,Python 打印出包含两个元素的列表的 repr
: .py
文件的绝对路径和该文件的绝对路径我选择了。
我编写了以下批处理文件进行测试:
cd C:\folder\of\py\file\
C:\folder\of\py\file\argv_dump.py "C:\path\to\a\file.txt"
当我运行此批处理文件时,无论是从命令提示符还是在 Windows 资源管理器中双击它,我都会得到与之前相同的输出。在第一行,Python 打印出
.py
文件的包含目录,在第二行,Python 打印出包含两个元素的列表的 repr
: .py
文件的绝对路径和 C:\path\to\a\file.txt
.
现在,我尝试从脚本在 Windows 10 上启动蓝牙传输。我写了一个三行批处理文件用于测试:
cd C:\Windows\system32\
C:\Windows\system32\fsquirt.exe "C:\path\to\a\file.txt"
pause
这似乎不会将
"C:\path\to\a\file.txt"
发送到 fsquirt.exe
。出现蓝牙文件传输对话框,但它仍然要求我选择要发送的文件。在命令提示符窗口中运行这些命令会产生相同的结果。
fsquirt.exe
如何知道我拖放或使用发送到时与我从批处理文件或命令提示符手动传递绝对文件路径时之间的区别?我怎样才能让fsquirt.exe
注意到我给它的文件路径?
我确实查看了另一个问题,它建议检查批处理文件的当前工作目录。不过,我的批处理文件中的
cd
不会解决这个问题吗?
过去,我通过蓝牙安装程序使用了蓝牙命令行工具。他们允许我通过 Windows 命令行自动化蓝牙工作流程。
这不是一个很好的答案,但请注意,在某些情况下,使用宏来定位资源管理器中的“发送到”菜单可能会更容易。其中包括“蓝牙设备”,并且可以向其中添加项目。
例如,我使用 NirCmd 将剪贴板保存到文件,然后使用 AutoHotkey 启动蓝牙发送。
这不是一个足够优雅的解决方案,无法详细重现,但这些都不需要知道鼠标光标在哪里。您可以通过将文件名发送到活动窗口来选择资源管理器中的文件,并且可以使用 Shift-F10 获取上下文菜单。 (“发送至”则为选项 N。)
因此,在没有模拟拖放的工具的情况下,这至少是一种快速而肮脏的方式,并且具有一定的可重复性。