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


28

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

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


您正在使用哪个Windows版本?
iglvzx

我使用Windows 7
jtpereyda

1
这有更好的解决方案: superuser.com/questions/136133/...

Answers:


20

遇到了与@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或更早的OS版本可能会缓存数据。在这种情况下,该实用程序将是更好的选择,否则您可能需要注销并登录以查看更改。


1
注意:%1似乎总是应该用来将关联文件传递给程序。直接使用%*似乎无效。至少我赢了7时遇到了我的“ .pl”
-perl

1
我通过反复试验使它工作,得到以下数据值:"C:\Program Files\nodejs\node.exe" "%1"%*注意:该%*值不在引号中,并且它与先前的双引号之间没有空格。
Michael Paulukonis 2015年

我还删除HKEY_CLASSES_ROOT\.ulaw了regedit中的密钥,以防万一.ulaw我正在执行该过程的文件的扩展名在哪里。
马特

我们如何在打开时传递参数(例如“测试”)?
Apparao

请更改此答案以明确修改“ [HKLM | HKCU] \ Software \ Classes”,具体取决于安装上下文。不要直接修改HKCR。有关文件类型和文章,请参见“重要注意事项”HKEY_CLASSES_ROOT。它更考虑到微软自己的文档早对HKCR是引入大约Windows 2000中的合并视图可以理解的误区
Eryk太阳

10

您可以通过assocftype在命令提示符下执行此操作。打开提升权限的命令提示符,然后尝试以下操作:

ftype MyFileType = C:\ MyDir \ MyProgram.exe / arg1 / arg2“%1”
assoc .xyz = MyFileType

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


1
接受,因为这似乎是我研究的正确答案。但是,此过程在我使用的系统上似乎无效。我可以使用ftype和assoc来验证所做的更改,但是它不会影响用于打开文件的程序。Windows 7中的过程可能已更改?
jtpereyda 2012年

使用Marcus Pope的答案,可以使其在Windows 7上正常运行。尝试使用其中的预定义参数播放.ulaw文件sox。请注意,除了删除旧应用程序之外,我还删除HKEY_CLASSES_ROOT\.ulaw了正在定义文件类型的文件。
马特

CMD assocftype是旧命令。它们没有更新为Windows XP,7和8中添加的文件关联扩展名。它们仅修改了系统键“ HKLM \ Software \ Classes”下的文件关联和ProgId键。它们不会读取或修改优先级较高的按用户HKCU设置,也不会读取或修改较新的子项(例如“ Applications”和“ SystemFileAssociations”)或“ RegisteredApplications”中的按应用程序功能项。他们也不会在“ HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts”下阅读或修改用户的选择。
Eryk Sun

3

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

我已经为XP找到了解决方案,它可能适用于以后的OS。

在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" "%*"

我认为这是不正确的。在“%*”周围使用引号将使参数列表作为单个参数传递。另外,您在驱动器号后想念冒号。正确的命令应该是:ftype name_of_assoc =“ C:\ blah \ aprog.exe” -m“%1”%*
User0

我使用的是出色的FilesTypeMan程序,在这种情况下,您%1 %* 无需引号!该死的窗户
让-弗朗索瓦·法布尔

2

我在Windows7的PSP的较旧版本中遇到了类似的问题

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


1
为什么要下票?这个答案帮助我终于正确地获得了命令!
ylka '17

谢谢-我有报价,它不工作
myaccessible.website -菲奥娜

1

不是最好的解决方案,但最简单的解决方案是使用批处理文件。

这样创建一个bat文件,并将其默认程序设置为该文件的扩展名。是的,启动后必须使用空引号:

{app name} .bat

    start "" "{app path}" %1 /edit

例:

BCompareEdit.bat

    start "" "C:\Program Files\Beyond Compare 4\BCompare.exe" %1 /edit

1
这是在Windows 10上唯一适用于我的解决方案。它可以帮助我使用/ w选项启动Word 2013,以便在每次启动时都具有一个新实例,这对于在虚拟桌面上使用Word是必需的。
vicmortelmans

0

是一个扩展,它似乎完全可以满足您的需求。我以前从未使用过它,但它似乎获得了好评。如有问题,请发表评论。


-1

制作Windows快捷方式并使用以下模板:

"C:\Windows\system32\mspaint.exe" "c:\data\basejpg.jpg" %1

2
用户如何使用它来打开一个文件,如xyz.jpg
G-Man说'Resstate Monica''17

他询问如何更改注册表以实现此目的。
轧辊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.