我正在尝试将批处理文件中的参数传递给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
任何人都可以帮忙。
答案 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时修剪双引号。