2016-08-29 160 views
1

我想從批處理文件傳遞參數到VB腳本文件。從批處理文件傳遞參數到VBScript文件

set InputFile ="C:\Temp\InputFile_mod.csv" 
set outPutFile = "C:\Temp\outputFile.dat" 

我試圖通過變量如下,但我沒有得到任何東西到VBScript文件。

cscript SFEVBMacro.vbs InputFile outPutFile 

但如果我通過了文件的直接路徑像它下面是工作的罰款

cscript SFEVBMacro.vbs C:\Temp\InputFile_mod.csv C:\Temp\outputFile.dat. 

有什麼不對的傳遞參數與變量?

VBScript代碼:

Set args = WScript.Arguments 
inputFile = WScript.Arguments.Unnamed(0) 
createdFilePath = WScript.Arguments.Unnamed(1) 

Sub ReadCSVFile() 
    Set objFileToRead = objFSO.OpenTextFile(inputFile,1) 
    REM Read the csv file 
End Sub 
ReadCSVFile 

能有人可以幫助請。

+0

Ryan我添加了vbscript代碼。 – surendra

+0

刪除'set'命令行中'='符號周圍的空格,因爲它們成爲變量名稱和值的一部分,否則......當擴展(閱讀)變量時,你需要把它的名字放在一對'%'符號之間... – aschipfl

回答

0

問題可能出在引號中。嘗試使用雙引號而不是字符串來包圍您發佈的前兩行。
這可能會有所幫助,就好像您傳遞的文件路徑沒有引號一樣,但在第一個示例中,您將它們設置爲引號。
其他方法是當參數進入vbscript時修剪雙引號。

+0

我試過但沒有運氣。但在傳遞變量時,我觀察到變量名稱不是它的值。 – surendra

+0

噢...是啊:D你必須在變量名稱周圍放上'%': '%varname%' – geisterfurz007

2

你的代碼有兩個問題。第一個是變量賦值存儲

set InputFile ="C:\Temp\InputFile_mod.csv" 
      ^
set outPutFile = "C:\Temp\outputFile.dat" 
      ^^ 

指示被包括在變量名稱(當放置在相等的左側)的空間,並在值(等於右側)

這是一個好習慣引用賦值,以防止特殊字符的問題,但recomended語法

set "InputFile=C:\Temp\InputFile_mod.csv" 
set "outPutFile=C:\Temp\outputFile.dat" 

其中報價保障任務,還有等號周圍沒有空格,請注意,這個語法,引號不是s tored在變量值中。

第二個問題是你如何使用變量。您的vbscript代碼不期望兩個變量名稱,但是兩個文件名稱。因此,您不必傳遞變量名稱,而是存儲在其中的值。在批處理文件中,這是使用%varname%完成的。

set "InputFile=C:\Temp\InputFile_mod.csv" 
set "outPutFile=C:\Temp\outputFile.dat" 

cscript SFEVBMacro.vbs "%InputFile%" "%outPutFile%" 

批解析器會將變量讀取操作替換爲變量內的值,然後執行該命令。

如果你喜歡傳遞變量名(你原來的代碼),而不是變量值,你可以做到這一點,但隨後將VBScript應改爲檢索變量的內容

With WScript.CreateObject("WScript.Shell").Environment("PROCESS") 
    inputFile = .Item(WScript.Arguments.Unnamed(0)) 
    createdFilePath = .Item(WScript.Arguments.Unnamed(1)) 
End With 

正如代碼接收環境變量名稱時,我們需要使用WScript.Shell實例的Environment屬性從過程環境中檢索變量內容。

+0

謝謝MC ND ...它的運行良好... – surendra

相關問題