我创建了一个自定义文件扩展名,我将与批处理脚本相关联。 我用了
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" %*
答案 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 %*
您的ASSOC
和FTYPE
陈述似乎没问题。
编辑根据 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" %%*
应该有用。