Batch file 将参数传递到VBS脚本中,该脚本将传递到批处理文件中

Batch file 将参数传递到VBS脚本中,该脚本将传递到批处理文件中,batch-file,vbscript,arguments,Batch File,Vbscript,Arguments,我有一个遗留应用程序,它不支持使用windows中定义的默认应用程序,它要求我为要在应用程序中打开的文件格式指定一个特定的可执行文件。由于微软默认情况下不再在Office中使用MODI,我一直在考虑使用Windows图片查看器启动.TIF、.TIFF、.BMP文件,因为它内置在Windows中;但是,Microsoft没有可调用的Windows Picture Viewer直接可执行文件,这迫使我创建一个脚本来执行调用Windows Picture Viewer执行的命令。经过研究,我能够调用应

我有一个遗留应用程序,它不支持使用windows中定义的默认应用程序,它要求我为要在应用程序中打开的文件格式指定一个特定的可执行文件。由于微软默认情况下不再在Office中使用MODI,我一直在考虑使用Windows图片查看器启动.TIF、.TIFF、.BMP文件,因为它内置在Windows中;但是,Microsoft没有可调用的Windows Picture Viewer直接可执行文件,这迫使我创建一个脚本来执行调用Windows Picture Viewer执行的命令。经过研究,我能够调用应用程序打开特定文件的唯一方法是创建一个批处理文件,如下所示:

蝙蝠

如果我从命令提示符或应用程序启动执行上述代码,如GIFTS.BAT C:\Example Directory\Sample File.tif,并且Sample File.tif打开时没有问题;但是,从应用程序启动时,命令提示符将与文件一起打开

在此基础上,我尝试创建一个vbscript来隐藏批处理文件,使其无法执行,但是如果参数中有空格,我似乎无法传递参数

礼品.VBS

如果尝试从命令提示符(如GIFTS.VBS C:\Example Directory\Sample File.tif)执行VBScript,则应用程序从未启动且命令提示符未返回任何消息或错误。如果我将执行命令简化为GIFTS.VBS C:\Sample_File.tif,则应用程序启动时会显示文件Sample_File.tif,并且在应用程序执行VBScript时不会显示命令提示

我的问题是,当参数包含空格时,如何将参数传递到VBS脚本中,该脚本反过来传递批处理文件,因为该参数将是文件名和路径,因此始终会有空格

可能有一个更容易的方法来实现我想要的目标;然而,我正在寻找一个解决方案,Windows7-8.1可以利用没有额外的软件来安装或管理每个工作站。批处理文件工作得很好,我只需要能够隐藏随应用程序一起打开的命令提示符,因为我的最终用户不知道如何处理它


谢谢

有时,嵌套级别的转义字符需要熟悉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命令成功,指定的文件必须存在。

可能重复的“%1”已加上引号(如果有),因此可以安全地用引号将其括起来。这应该使它的工作,无论是否有空间在那里。这就做到了!我现在可以使用双引号传递带有空格的文件名,并且命令提示符在应用程序中保持隐藏。
Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run """C:\GIFTS.BAT"" " & WScript.Arguments.Item(0), 0
Set WshShell = Nothing
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