【问题标题】:Running VB Script file with arguments运行带参数的 VB 脚本文件
【发布时间】:2016-02-26 00:29:18
【问题描述】:

我必须运行一个有 2 个参数的 VB 脚本。所以我在下面运行一个命令。

Delete_Dummy1.vb
s C:\Users\c6342\Desktop\XML_to_CSV\Temp_Files\xml.csv C:\Users\c6342\Deskto
p\XML_to_CSV\Temp_Files\xml1.txt
**VB Script Sample - not working:** 
**sourceloc** = WScript.Arguments.Item(0)
**destloc** = WScript.Arguments.Item(1)
Dim objFSO, dataArray, clippedArray()
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oTextStream = objFSO.OpenTextFile("**sourceloc**")
Set newFile = objFSO.CreateTextFile("**destloc**")

它将错误抛出为 file not found. 但如果我对 sourceloc 和 destloc 进行硬编码并删除参数,它就可以正常工作。只有当我使用参数时它才会抛出错误。

**Working VB Script sample:**
Set oTextStream = objFSO.OpenTextFile("C:\Users\c6342\Desktop\XML_to_CSV\Temp_Files\xml.csv")
Set newFile = objFSO.CreateTextFile("C:\Users\c6342\Desktop\XML_to_CSV\Temp_Files\xml1.txt")

这很好用。但根据我的项目要求,我无法对这些文件位置进行硬编码。我可以从命令中作为参数传递。

【问题讨论】:

  • 对不起请忽略代码sn-ps中的**。我刚刚用 ** 强调了重要的事情。
  • 您需要将带有空格的参数用双引号括起来(")
  • 我也试过用双引号。但无论如何,我的源文件和目标文件位置都没有空格。
  • 我知道你说用引号括住每个值不起作用?查看my answer below 我更详细地介绍了空间是如何被解释的。

标签: command-line vbscript command-line-arguments


【解决方案1】:

length discussion in the comments 之后认为最好更新我的答案。

参数不起作用的原因是您从未将它们传递给 OpenTextFile()CreateTextFile() 方法。相反,您传递的是包含变量名称而不是实际变量的文字字符串。

sourceloc = WScript.Arguments.Item(0)
destloc = WScript.Arguments.Item(1)

Dim objFSO, dataArray, clippedArray()
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Pass the variables not a string literal
Set oTextStream = objFSO.OpenTextFile(sourceloc)
Set newFile = objFSO.CreateTextFile(destloc)

就目前而言,VBScript 一直试图定位一个名为 sourcelocdestloc 的文件,而不是来自传递的 Arguments 集合的实际文件名。这是什么原因可能导致

Microsoft VBScript 运行时错误:找不到文件


注意:以下内容基于initial question,此后已进行了修订。


这取决于您如何将参数传递给脚本,值中的任何空格都将被视为新参数。目前这是传递参数的方式;

0. C:\用户\输入 1.代码 2. herec6342\Desktop\XML_to_CSV\Temp_Files\xml.csv 3. C:\Users\c6342\Desktop\XML_to_CSV\Temp_Files\xml1.txt

我确定这不是您所期望的。为了避免这种情况,请将每个参数用双引号括起来 ("...")

Delete_Dummy1.vbs "C:\Users\enter code herec6342\Desktop\XML_to_CSV\Temp_Files\xml.csv" "C:\Users\c6342\Desktop\XML_to_CSV\Temp_Files\xml1.txt"

这样你会得到更多你所期望的

0. C:\Users\在此处输入代码c6342\Desktop\XML_to_CSV\Temp_Files\xml.csv 1. C:\Users\c6342\Desktop\XML_to_CSV\Temp_Files\xml1.txt

【讨论】:

  • Delete_Dummy1.vbs "C:\Users\chandu\Desktop\XML_to_CSV\Temp_Files\xml.csv" "C:\Users\chandu\Desktop\XML_to_CSV\Temp_Files\xml1.txt" 我试过这个.但仍然无法正常工作。
  • @chandrasekhar 我只能删除您发布的内容,无论哪种方式,使用双引号始终是避免此类问题的好主意。我不确定在没有解释的情况下将该行作为评论发布是什么?这是您最初发布的Delete_Dummy1.vb s C:\Users\enter code herec6342\Desktop\XML_to_CSV\Temp_Files\xml.csv C:\Users\c6342\Deskto p\XML_to_CSV\Temp_Files\xml1.txt。我猜enter code herec6342 是一个错字,这可能导致您原来的File Not Found 错误。
  • 对不起。我的用户名是 c6342。发布我的问题后,stackoverflow 自动将 c6342 转换为输入代码 herec6342。这就是为什么我在评论时删除了该代码并替换为 chandu 以避免混淆。
  • @chandrasekhar 如果你想这样做,你会更好editing the question
  • 谢谢@Lankymart。它有效...感谢您的时间和帮助。
猜你喜欢
  • 2021-01-11
  • 2012-08-21
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
相关资源
最近更新 更多