将命令行参数传递给 Windows“打开方式”

将命令行参数传递给 Windows“打开方式”

我有一个使用特定快捷方式打开的程序,但快捷方式似乎会向应用程序发送参数。如果我直接转到目标目录并双击,它不起作用。但是,如果我使用命令行并传入某个参数,应用程序就会正确打开。

我想使用该应用程序打开某些文件类型,但该应用程序必须具有参数,否则将无法工作。可以这样做吗?

答案1

遇到了与 @jtpereyda 相同的问题,而 @bobbymcr 的解决方案对我来说也不起作用。我试图将所有命令行参数传递到 node.js 脚本中,而无需在命令中使用 node.exe。

问题是,如果您已经通过对话框将程序与扩展名关联,Open With那么您将在两者之间创建应用程序关联,而不是文件扩展名关联。并且应用程序关联优先。

如果您不介意编辑注册表,您可以修改(Default)以下路径中的项:

HKEY_CLASSES_ROOT\Applications\node.exe\shell\open\command

您应该node.exe用您正在调整的应用程序来替换。

或者您可以从文件夹中完全删除应用程序文件夹HKEY_CLASSES_ROOT\Applications,然后您的ftype关联将开始工作。

确保使用%*将传入剩余未指定的命令行参数或不传入任何参数。如果这样做,"%2" "%3" "%4" "%5"当您未指定任何命令行参数时,将有 5 个空字符串参数传入您的应用程序。

最后,如果你不同意手动修改注册表,那么你可以使用 Nirsoft 的免费工具 - FileTypesManager -http://www.nirsoft.net/utils/file_types_manager.html

文件关联将显示在列表顶部,第一个扩展列中没有任何文本。只需在列表中找到可执行文件的名称并选择它即可修改操作名称command line的字段open

在 Windows7 上,更改会立即反映出来,无需重新启动或重新启动应用程序。但是,Nirsoft 实用程序具有“刷新桌面”功能,可对任何修改进行刷新,因此我相信 Vista 或之前的操作系统版本可能会缓存数据。在这种情况下,实用程序会是更好的选择,否则您可能需要注销并登录才能看到更改。

答案2

您可以在命令提示符下使用assoc和执行此操作。打开ftype升高命令提示符并尝试以下操作:

ftype MyFileType=C:\MyDir\MyProgram.exe /arg1 /arg2 “%1”
assoc .xyz=我的文件类型

这会将.xyz扩展与程序关联MyProgram.exe并将命令行传递/arg1 /arg2 [filename.xyz]给程序来运行它。

答案3

提出问题的人报告说最佳答案实际上不起作用。

我已经弄清楚了 XP 的情况,它可能适用于更高版本的操作系统。

在 cmd 提示符下,您需要两个命令:assocftype

这两个可以显示关联的内容,然后编辑关联,但有一个问题,MS 说明似乎是错误的/不完整的。我注意到已知的资深应用程序未记录的关联样式,因此注意到了这一点,为什么?

此示例可以将许多参数传递给关联程序。

ftype name_of_assoc="C\blah\aprog.exe" "%1" "%*"

这不是拼写错误"%1" "%*"。如果没有前面的百分比 1

并且立即生效,无需注销等。

正确完成后将传递 3 到 arg[]

myfile.wotsit file1 file2 file3

还没有这样做,但如果程序需要标志,则以下外部引号似乎会传递 -m。

ftype name_of_assoc="C\blah\aprog.exe" -m "%1" "%*"

答案4

我在使用 Windows7 的旧版 PSP 时也遇到了类似的问题

此解决方案(在注册表中更改 shell\open\命令行)有效,但必须有语法“C:\MyFolderName\PSP.EXE”%1,%1 周围没有引号,否则将被解释为常量

相关内容