如何将单击的文件完整路径传递给设置为默认程序以打开某些特定文件类型的批处理命令快捷方式

Posted

技术标签:

【中文标题】如何将单击的文件完整路径传递给设置为默认程序以打开某些特定文件类型的批处理命令快捷方式【英文标题】:How to pass clicked file full path to a batch command shortcut that is set as a defualt program to open some specific file types 【发布时间】:2011-10-21 15:59:19 【问题描述】:

我有一个批处理命令(设置为打开所有图像文件的默认程序),它运行以下命令

rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %1

这可能是为了打开 windows 图片查看器

现在在 %1 中,我必须传递所需的图片,该图片肯定可以从 Windows UI 访问。但是我将如何告诉它应该打开哪个文件?如何在批处理命令的参数中传递双击文件的完整路径,是否有任何环境变量保存最后访问的文件的完整路径?

【问题讨论】:

【参考方案1】:

没有。批处理文件有这个问题,但可以避免,因为传递的参数包含特定文件的完整路径。但是,如果完整路径名(将!)包含空格,则必须将参数括在引号中以避免任何错误:

rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen "%1"

另一方面,您也可以将多个文件名拖放到批处理文件中。在这种情况下,您必须通过使用 SHIFT 命令的循环以通常的方式处理它们:

:nextfile
if "%1" == "" goto endfiles
  rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen "%1"
  shift
  goto nextfile
:endfiles

【讨论】:

+1,但if "%1" == "" goto endfiles 应该是if "%~1" == "" goto endfiles,否则路径中的空格会出现问题,并且文件名总是像me&you.bmp 这样的文件名失败

以上是关于如何将单击的文件完整路径传递给设置为默认程序以打开某些特定文件类型的批处理命令快捷方式的主要内容,如果未能解决你的问题,请参考以下文章

C# process.Start 文件名和传递参数

将意图文件路径共享给文件管理器以打开该路径

按完整路径打开文件

如何使用 Qt 中的默认程序在服务器上打开文件?

Perl - 我如何将完整的目录路径名传递给 perl 脚本

如何将我的程序添加到右键单击上下文菜单并传递它的路径