通过使用 Windows 中的上下文菜单,我想使用 ADB 将选定的文件无线推送到 Android 设备。
我想连接到设备,推送选定的文件并每次断开连接,所以我创建了这个简单的批处理文件:
@ECHO OFF
D:\adb.exe connect 192.168.0.103:5555
D:\adb.exe push "%%~f1" /sdcard/
D:\adb.exe disconnect
上下文菜单中的命令指向我的批处理文件:
[HKEY_CLASSES_ROOT\*\shell\ADB_Push_to_Phone]
[HKEY_CLASSES_ROOT\*\shell\ADB_Push_to_Phone\command]
@="D:\\Tools\\CMD\\ADB_PUSH_TO_PHONE.cmd"
按预期运行此命令(右键单击文件->ADB_Push_to_Phone)会在推送命令中出现此错误:
adb: error: cannot stat '%~f1': No such file or directory
如何在此命令中正确扩展所选文件的完整路径?或者这种方法存在其他问题?
答案1
如果我查看 GIMP 图像编辑器的文件关联,命令行如下:
"C:\Program Files\GIMP 2\bin\gimp-2.10.exe" "%1"
您的命令行中没有该"%1"
部分。如果添加它,应该可以正常工作。完整的命令可能如下所示:
D:\Tools\CMD\ADB_PUSH_TO_PHONE.cmd "%1"
.reg
(请注意,我没有使用文件中所需的任何转义。)
为了诊断问题,我建议在批处理文件中进行调试打印,并可能使用pause
或timeout
命令来查看它们。
答案2
解决方案是将上下文菜单命令设置为:
"D:\Tools\CMD\ADB_PUSH_TO_PHONE.cmd" "%1"
并在批处理文件中修改推送命令:
D:\adb.exe push %1 /sdcard/
答案3
adb:错误:无法统计
'%~f1'
: 没有这样的文件或目录
没有扩展%1
在%~f1
对于任何注册表参数:
Arguments:
%1, %D, %H, %I, %L, %S, %V, %W
Not Work/Expand:
%~nx1, %~nxD, %~nxH, %~nxI, %~nxL, %~nxS, %~nxV, %~nxW
Often we find "%1" in the commands associated with file types
(HKEY_CLASSES_ROOT\FileType\shell\open\command).
In Windows 9x through 2000 (and possibly XP) this would evaluate
to the short notation of the fully qualified path of the file of type FileType.
To get the long file name, use "%L" instead of "%1".
当使用时right click on file -> ADB_Push_to_Phone
,必须将选定的文件传递给您的.bat
,它不会来automatically
,它首先从寄存器“传递”到.bat
作为参数。
您已经在处理该路径,通过右键单击“%V”中的 Windows 注册表将其作为完整路径传递,因此您可以使用“%~1”,因为您的 bat 文件中收到了该参数。
@echo off
cd /d "%~d0"
adb.exe connect 192.168.0.103:5555
adb.exe push "%~1" /sdcard/
adb.exe disconnect
在 Windows 注册表(或.reg
文件)中使用:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\ADB_Push_to_Phone]
[HKEY_CLASSES_ROOT\*\shell\ADB_Push_to_Phone\command]
@=\"C:\\Windows\\System32\\cmd.exe\" /q /c \"D:\\Tools\\CMD\\ADB_PUSH_TO_PHONE.cmd\" \"%L\"\"
你的bat可以直接转到可执行文件所在的位置,而不需要为每个驱动器/卷的改变编辑路径,使用cd /d "drive_where_your_bat_is"
:
@echo off
cd /d "%~d0"
adb.exe connect 192.168.0.103:5555
adb.exe push "%~1" /sdcard/
adb.exe disconnect
- 或者使用
drive_where_your_bat_is:
+\adb.exe
@echo off
%~d0\adb.exe connect 192.168.0.103:5555
%~d0\adb.exe push "%~1" /sdcard/
%~d0\adb.exe disconnect