【问题标题】:Passing an argument into a VBS script which passes into a batch file将参数传递到 VBS 脚本中,该脚本传递到批处理文件中
【发布时间】: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 可以使用的解决方案,无需在每个工作站上安装或管理额外的软件。批处理文件效果很好,我只需要能够隐藏与应用程序一起打开的命令提示符,因为我的最终用户不知道如何处理它。

谢谢!

【问题讨论】:

标签: batch-file vbscript arguments


【解决方案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() 命令成功。

【讨论】:

  • 做到了!我现在可以使用双引号传递带有空格的文件名,并且命令提示符在应用程序中保持隐藏状态。
猜你喜欢
  • 2015-08-18
  • 2011-09-15
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
相关资源
最近更新 更多