Windows:与批处理文件建立文件关联

时间:2015-01-28 09:52:08

标签: windows batch-file file-association

我创建了一个自定义文件扩展名,我将与批处理脚本相关联。 我用了

ASSOC .myext=MY.FILETYPE
FTYPE MY.FILETYPE=cmd /c "C:\Path\of\my\batch.bat" %1 %*

现在批处理文件" C:\ Path \ of \ my \ batch.bat"是一个简单的单行

echo %1

粗略地工作:双击.myext文件会弹出一个回显文件路径的cmd shell 但是当.myext文件位于包含空格的路径中时会出现问题:回显的文件路径被截断到空格。
双引用FTYPE语句中的%1似乎不起作用。

FTYPE MY.FILETYPE=cmd /c "C:\Path\of\my\batch.bat" "%1" %*

3 个答案:

答案 0 :(得分:5)

双引号%1是正确的,但是当命令和至少一个参数包含引号时cmd.exe包含错误,它会失败。
因此,您需要通过插入CALL来生成没有引号的命令。

FTYPE MY.FILETYPE=cmd /c call "C:\Path\of\my\batch.bat" "%1" %*

答案 1 :(得分:2)

将批处理文件"C:\Path\of\my\batch.bat"内容更改为

echo %*

您的ASSOCFTYPE陈述似乎没问题。

编辑根据 Monacraft 的评论。

此解决方案是正确的,因为%1将引用文档 filename ,而%*将引用其他参数:如果应用程序需要任何其他参数它们可以作为 %2%3传递。 要将所有参数传递给应用程序,请使用 %*

在命令行中使用aFile.myext a b c很方便,但对于那种用法,FTYPE语句应为

  

FTYPE MY.FILETYPE = cmd / D / C“C:\ Path \ of \ my \ batch.bat”%1“”%*

如果包含空格,则区分第一个参数。

示例:带

ASSOC .xxx=XXXFILE
rem a bug here FTYPE XXXFILE=%ComSpec% /D /C "d:\bat\xxxbatch.bat "%1"" %*
rem definitely switched to Jeb's solution as follows
FTYPE XXXFILE=%comspec% /D /C call "d:\bat\xxxbatch.bat" "%1" %*

xxxbatch.bat如下

@echo(
@echo %*
@if "%2"=="" pause
@goto :eof

<强>输出

d:\bat>D:\test\xxxFileNoSpaces.xxx aa bb cc

"D:\test\xxxFileNoSpaces.xxx"  aa bb cc

d:\bat>"D:\test\xxx file with spaces.xxx" dd ee

"D:\test\xxx file with spaces.xxx"  dd ee

d:\bat>

答案 2 :(得分:1)

如果您从bat文件中使用此文件,请尝试将其更改为:

ASSOC .myext=MY.FILETYPE
FTYPE MY.FILETYPE=cmd /c "C:\Path\of\my\batch.bat" "%%1" %%*

我甚至认为

  FTYPE MY.FILETYPE="C:\Path\of\my\batch.bat" "%%1" %%*

应该有用。