将参数传递到传入批处理文件的VBS脚本中

时间:2014-11-03 20:50:02

标签: batch-file vbscript arguments

我有一个遗留应用程序,不支持使用Windows中定义的默认应用程序,这要求我为应用程序中打开的文件格式指定特定的可执行文件。由于Microsoft默认不再包含带有Office的MODI,因此我一直在寻找使用.TIF,.TIFF和&amp ;;的Windows Picture Viewer。 .BMP文件,因为它内置于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

如果我尝试从命令提示符执行VBScript,例如 GIFTS.VBS“C:\ Example Directory \ Sample File.tif” ,应用程序永远不会启动命令提示符不返回任何消息或错误。如果我简化执行命令(删除空格到 GIFTS.VBS“C:\ Sample_File.tif” ,应用程序启动以及文件Sample_File.tif显示在那里应用程序执行V​​BScript时没有显示命令提示符。

我的问题是如何将一个参数传递给VBS脚本,当参数包含空格(因为参数将是文件名和路径时总是会出现空格)时,该脚本反过来传递批处理文件?

对于我想要实现的目标,可能有一种更简单的方法;但我正在寻找一种Windows 7 - 8.1可以使用的解决方案,而无需在每个工作站上安装或管理其他软件。批处理文件工作得很好我只需要能够隐藏随应用程序打开的命令提示符,因为我的最终用户将不知道如何处理它。

谢谢!

1 个答案:

答案 0 :(得分:0)

有时,嵌套级别的转义字符需要对CMD或某些伏都教的无证行为有深入了解。解决问题的另一种方法是保证文件名中不会有任何空格。 Windows有一个短路径(没有空格或特殊字符)的概念,每个现有文件都有一个独特的路径。

以下是程序的修改版本,其中调用的子命令不需要文件名周围的引号。

Set WshShell = CreateObject("WScript.Shell") 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set fsoFile = fso.GetFile(WScript.Arguments.Item(0))

WshShell.Run """c:\GIFTS.BAT"" " & fsoFile.ShortPath, 0
Set WshShell = Nothing

您可能希望添加自己的错误检查。指定的文件必须才能使GetFile()命令成功。