Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过传递参数从另一个vbscript文件调用vbscript_Vbscript - Fatal编程技术网

通过传递参数从另一个vbscript文件调用vbscript

通过传递参数从另一个vbscript文件调用vbscript,vbscript,Vbscript,我正在使用下面的脚本调用另一个脚本。问题是我必须将WScript检索到的参数传递给我正在调用的第二个脚本。是否有人可以告诉我如何执行此操作 Dim objShell Set objShell = Wscript.CreateObject("WScript.Shell") objShell.Run "TestScript.vbs" Set objShell = Nothing 使用: 如果其中一个参数包含空格,则需要将其嵌入引号中,可能如下所示: objShell.Run "Test

我正在使用下面的脚本调用另一个脚本。问题是我必须将WScript检索到的参数传递给我正在调用的第二个脚本。是否有人可以告诉我如何执行此操作

Dim objShell
Set objShell = Wscript.CreateObject("WScript.Shell")

objShell.Run "TestScript.vbs"    

Set objShell = Nothing
使用:

如果其中一个参数包含空格,则需要将其嵌入引号中,可能如下所示:

objShell.Run "TestScript.vbs arg1 arg2 ""this is three"""
Function qq(str)
  qq = Chr(34) & str & Chr(34)
End Function

arglist = ""
With WScript.Arguments
  For Each arg In .Named
    arglist = arglist & " /" & arg & ":" & qq(.Named(arg))
  Next
  For Each arg In .Unnamed
    arglist = arglist & " " & qq(arg)
  Next
End With

CreateObject("WScript.Shell").Run "TestScript.vbs " & Trim(arglist), 0, True

或者它可以接受撇号(我最近没有尝试过这个)。

您需要通过正确引用参数来构建参数列表。您还需要区分命名参数和未命名参数。至少,所有带有空格的参数必须放在双引号之间。不过,简单地引用所有论点并没有什么坏处,所以您可以这样做:

objShell.Run "TestScript.vbs arg1 arg2 ""this is three"""
Function qq(str)
  qq = Chr(34) & str & Chr(34)
End Function

arglist = ""
With WScript.Arguments
  For Each arg In .Named
    arglist = arglist & " /" & arg & ":" & qq(.Named(arg))
  Next
  For Each arg In .Unnamed
    arglist = arglist & " " & qq(arg)
  Next
End With

CreateObject("WScript.Shell").Run "TestScript.vbs " & Trim(arglist), 0, True

我发现答案有点让人困惑,所以这是我的答案,在我看来更简单。另一个答案没有错,只是略有不同

在test.vbs文件中:

Set shell = CreateObject("WScript.Shell")
shell.CurrentDirectory = "C:\some\path\"
x = "testing"
shell.Run "test1.vbs " & x 
testing
C:\some\path\test1.vbs
文件中:

x = WScript.Arguments.Item(0) 
msgbox x
从test.vbs文件生成的消息框,传递到test1.vbs文件:

Set shell = CreateObject("WScript.Shell")
shell.CurrentDirectory = "C:\some\path\"
x = "testing"
shell.Run "test1.vbs " & x 
testing

在我的第一个脚本中,我将此语句设置为objArgs=WScript.Arguments,我想将此objArgs作为参数传递给下一个脚本。它只是将objArgs作为字符串传递给下一个脚本,而不是作为具有值的对象。@user505210-不能将对象作为参数传递给使用.Run或.Exec创建的进程;您必须将所有需要的信息作为/转换为字符串发送(而不是像WScript那样硬。Arguments(.Named)是字符串列表)。使用
.Run
时传递的参数基本上只是字符串,虽然接收脚本将其存储在object:Arguments中,但您无法使用此简单的命令行方法-事件传递对象。如果您真的想在脚本之间传递一个对象,那么您必须从一个单独的文件中对它们进行序列化和反序列化,这对于VBScript来说不是一个简单的过程。我建议,使用Ekkehard,您只需将字符串/值传递给第二个脚本。您的代码没有传递它们,而是创建了自己的参数。我在
arglist=arglist&“qq(arg)
行的
预期语句结尾处发现了此错误,就在
qq(arg)
@user My bad>上的第一个字符之前。在
qq(arg)
之间应该有一个符号。修正了,“不痛”部分是错误的。至少
find
命令需要在命令行中使用引号。有没有办法保存它们?您能解释一下为什么需要区分命名参数和未命名参数吗?在循环中收集每个
WScript.Arguments(i)
也会重新创建原始命令行,而且代码更简单。@上次我检查
find
时,RolandIllig不是一个VBScript,而是一个外部命令。如果您真的阅读了这个问题(以及我的答案),您可能会注意到它们都不是关于运行任意外部命令的。这个问题是关于传递参数的。您的代码没有传递它们,而是创建自己的参数。