繁体   English   中英

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

[英]Windows: establish file association to batch file

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

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

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

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

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

echo %*

您的ASSOCFTYPE语句似乎没问题。

根据Monacraft的评论编辑

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

很方便aFile.myext abc使用aFile.myext abc ,尽管对于那个使用FTYPE语句应该是

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

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

示例 :with

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>

如果你从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" %%*

应该管用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM