将参数从批处理文件传递到VBScript文件

时间:2016-08-29 06:43:33

标签: batch-file vbscript

我正在尝试将批处理文件中的参数传递给vb脚本文件。

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

任何人都可以帮忙。

2 个答案:

答案 0 :(得分:2)

您的代码中存在两个问题。第一个是变量赋值

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

指示的空格包含在变量名称中(当放在等号的左侧时)和存储的值(等于右侧)

引用值赋值以防止特殊字符出现问题是一个好习惯,但推荐的语法是

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

其中引号保护赋值,等号周围没有空格,请注意,使用此语法,引号不会存储在变量值中。

第二个问题是如何使用变量。您的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

当代码接收环境变量名称时,我们需要使用Environment实例的WScript.Shell属性从流程环境中检索变量内容。

答案 1 :(得分:0)

问题可能在引号中。尝试用双引号而不是字符串包围您发布的前两行 这可能会有所帮助,就好像你传递的文件路径没有引号一样,但是在第一个例子中,你用引号设置它们。 其他方法是在参数进入vbscript时修剪双引号。