2014-01-16 57 views
0

从命令行或批处理文件运行具有未知扩展名的文件(可以说是test.nope) - 使用test.nopecall test.nopestart test.nope - 将显示一个窗口,要求您"Choose the program you want to use to open this file"(在Windows 7中,推测是在大多数Windows操作系统中)。如何禁止'打开'窗口

是否可以抑制此窗口?

我最初的想法是在尝试打开文件之前检查%PATHEXT%变量中是否存在扩展名。但是,这并不包含全部已知的文件扩展名。例如,尽管.py扩展名不在我的%PATHEXT%变量中,但Python脚本仍可正确打开。

+1

那你想让它做的,而不是问你有什么计划,使用?如果你知道正确的程序,你为什么不直接打电话给他? ('python test.py',而不是'start test.py') – Mitch

+0

也许只是errorlevel或其他东西的变化 - 也不一定总是有效 - 尽管我已经安装了python,并且.py文件将使用python打开,我可以不要使用'python'命令,因此如果该程序可以被调用或者不被调用,那么它不是最好的检查。不过,您可能不知道调用该文件的正确程序是什么。例如,如果你有一个不同类型的程序列表需要运行。在任何情况下,我都没有寻找解决办法,只是为了好奇。 – unclemeat

回答

2

文件类型在HKCR\full documentation available from MSDN)中注册。您可以通过检查密钥的存在来了解类型是否已注册。在批处理文件中,您可以使用reg命令来执行此操作。

reg query HKCR\.txt || echo This will never print 
reg query HKCR\.foobartxt || echo Could not find foobartxt 

这就是说,可以定义和命名文件类型,而无需默认处理程序。此外,那些有默认处理程序的人可能没有命令行 - 文件可能通过DDE或COM启动。

+0

很棒的回答。谢谢。 – unclemeat

+0

为什么回显语句? –

+2

@rockstartprogrammer,因为我很懒,而且很容易测试。 – Mitch

3

到直接注册表查询(如由@米奇建议的)另一种方法是使用命令行实用程序assoc

assoc .nope 

如果没有对文件的扩展名注册的应用它产生

C:\>assoc .nope 
File association not found for extension .nope 

如果找到关联(例如,对于.docx扩展名),它会生成

C:\>assoc .docx 
.docx=Word.Document.12 

您可能还会发现ftype有用。它返回由assoc(我办公室安装在非缺省位置,因为你可以看到)返回的文件类型的命令行:

C:\>ftype Word.Document.12 
Word.Document.12="D:\Microsoft Office\Office12\WINWORD.EXE" /n /dde 
+0

非常翔实的答案。 –

+0

另一个伟大的答案,谢谢肯。 – unclemeat