[英]Start Excel file from Windows batch script in safemode, use default file association
[英]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 %*
您的ASSOC
和FTYPE
语句似乎没问题。
根据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.