2014-11-03 214 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

相關問題