2014-11-03 121 views
0

我有一个遗留应用程序,它不支持使用Windows中定义的默认应用程序,该应用程序要求我指定特定的可执行文件以便在文件格式中打开应用程序。由于默认情况下Microsoft不再包含MODI,因此我一直在考虑使用启动Windows Picture Viewer for .TIF,.TIFF,& .BMP文件,因为它已内置到Windows中;但是,Microsoft没有Windows Picture Viewer的直接可执行文件,可以调用该文件,迫使我创建一个执行调用Windows Picture Viewer来执行的命令的脚本。研究后,我已经能够调用应用程序打开特定文件的唯一方法是通过创建一个批处理文件,如下面:将参数传递到传递到批处理文件的VBS脚本中

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:\实施例指南\ SAMPLE File.tif”应用从不启动并且命令提示符不返回任何消息或错误。如果我简化执行命令(删除空格到GIFTS.VBS“C:\ Sample_File.tif”应用程序将启动以及文件Sample_File.tif显示,并且应用程序执行时不显示命令提示符VBScript。

我的问题是如何将一个参数传递给VBS脚本,该脚本在参数包含空格时通过批处理文件(因为参数将是一个文件名,路径)?

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

谢谢!

+0

可能重复[VB脚本不识别实际参数](http://stackoverflow.com/questions/15289000/vb-script-does-not-recogonize-the-actual-parameter) – 2014-11-03 21:01:29

+0

%〜1 has有它的报价(如果有的话)被剥离,因此可以安全地将其包含在引号中。无论有没有空间,这都应该能够起作用。 – 2014-11-03 22:00:41

回答

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()命令成功,指定的文件必须存在

+0

这样做!我现在能够使用双引号将空格传递给文件名,并且命令提示符在应用程序中保持隐藏状态。 – Aeudian 2014-11-03 21:55:06

相关问题