【发布时间】:2014-11-04 05:49:24
【问题描述】:
我有一个遗留应用程序,它不支持使用 Windows 中定义的默认应用程序,这要求我为要在应用程序中打开的文件格式指定特定的可执行文件。由于默认情况下 Microsoft 不再在 Office 中包含 MODI,因此我一直在考虑为 .TIF、.TIFF 和 .BMP 文件启动 Windows 图片查看器,因为它内置在 Windows 中;但是,Microsoft 没有 Windows Picture Viewer 的直接可执行文件,可以调用它来强制我创建一个脚本,该脚本执行调用 Windows Picture Viewer 执行的命令。经过研究,我能够调用应用程序打开特定文件的唯一方法是创建一个批处理文件,如下所示:
GIFTS.BAT
rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %~1
如果我从命令提示符或应用程序启动并执行上述代码,例如 GIFTS.BAT "C:\Example Directory\Sample File.tif" Sample File.tif 打开没有问题;但是,从应用程序启动时,命令提示符会与文件一起打开。
在此之后,我尝试创建一个 vbscript 来隐藏批处理文件的执行,但是如果参数中包含“空格”,我似乎无法传递我的参数。
GIFTS.VBS
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """C:\GIFTS.BAT"" " & WScript.Arguments.Item(0), 0
Set WshShell = Nothing
如果我尝试从 GIFTS.VBS "C:\Example Directory\Sample File.tif" 等命令提示符执行 VBScript,则应用程序永远不会启动并且命令提示符不返回任何消息或错误。如果我简化执行命令(将空格删除到 GIFTS.VBS "C:\Sample_File.tif" 应用程序启动以及文件 Sample_File.tif 显示在那里是在应用程序执行 VBScript 时不显示命令提示符。
我的问题是如何将参数传递到 VBS 脚本中,当参数包含空格(由于参数将是文件名和路径,总是会有空格)时,该脚本将传递批处理文件?
对于我想要完成的事情,可能有一种更简单的方法;但是,我正在寻找一种 Windows 7 - 8.1 可以使用的解决方案,无需在每个工作站上安装或管理额外的软件。批处理文件效果很好,我只需要能够隐藏与应用程序一起打开的命令提示符,因为我的最终用户不知道如何处理它。
谢谢!
【问题讨论】:
-
%~1 的引号(如果有的话)被去掉了,所以用引号括起来是安全的。无论那里是否有空格,这都应该可以工作。
标签: batch-file vbscript arguments