Vbscript 调用需要用户输入的命令程序

Vbscript 调用需要用户输入的命令程序,vbscript,cmd,pscp,Vbscript,Cmd,Pscp,使用VBScript(通过cscript运行),如何调用另一个同样需要用户输入的命令程序(pscp) 其目的是,初始VBScript将收集参数(密码、用户等),然后是pscp命令 pscp -r -pw password copyFromPath user@host:copyToPath 可以发出,用户将能够看到pscp命令的输出,并且能够输入(例如,如果他们给出了错误的密码,需要再次输入) 我目前有: ' create the command, that calls pscp from cm

使用VBScript(通过
cscript
运行),如何调用另一个同样需要用户输入的命令程序(
pscp

其目的是,初始VBScript将收集参数(密码、用户等),然后是
pscp
命令

pscp -r -pw password copyFromPath user@host:copyToPath
可以发出,用户将能够看到pscp命令的输出,并且能够输入(例如,如果他们给出了错误的密码,需要再次输入)

我目前有:

' create the command, that calls pscp from cmd
Dim comSpec : comSpec = objShell.ExpandEnvironmentStrings("%comspec%")
Dim command : command = comspec & " /C " & """" & "pscp -r -pw " & "^""" & (Replace(pscpPassword,"""","\^""")) &  "^"" " _
  & "^""" & (windowsPath) & "^"" " _
  & pscpUser & "@" & pscpHostName & ":" & Replace(linuxPath," ","\ ") & """"
Dim objExec : Set objExec = objShell.Exec(command)
我为生成
命令
想到的另一个选择是:

Dim command : command = "pscp -r -pw " & Chr(34) & Replace(pscpPassword,"""","\""") & Chr(34) & " " _
  & Chr(34) & windowsPath & Chr(34) & " " _
  & pscpUser & "@" & pscpHostName & ":" & Replace(linuxPath," ","\ ")
但这两个都不允许我在调用pscp后与它交互

编辑


事实上,我正在调用
pscp
几乎是不相关的。我可以调用任何请求用户输入并向
stdout
stderr
显示内容的程序。我将所有命令放在一个脚本中(用&)分隔,然后在循环后运行它们。我附加“&pause”以保持窗口打开(有关详细信息,请参见问题下的注释)

我将所有命令放在一个脚本中(用&)分隔),然后在循环后运行所有命令。我附加“&pause”以保持窗口打开(有关详细信息,请参见问题下的注释)

pscp
是一个从SSH服务器复制文件或将文件复制到SSH服务器的程序。一旦启动,就不需要进一步的交互。如果指定了错误的密码,程序将以错误终止,并且您应该重复从请求密码到在VBScript中运行命令的步骤。否,
pscp
将在提供错误密码时再次提示输入密码,因此我希望捕获并允许输入密码。我还希望能够在复制文件时看到
pscp
输出的进度,而我目前无法使用给定的代码。如果使用参数
-batch
(您应该这样做),则无法看到。我为什么“应该”呢?我知道这在某些情况下是有用的,但这不是我在这个问题上的要求。无论如何,即使使用
-batch
pscp
输出我想要显示的进度-例如:
“filename.log | 0 kB | 0.0 kB/s | ETA:00:00 | 100%”
如果你的要求是射中自己的脚,你必须到其他地方寻求帮助。VBScript不适合您所要求的那种交互性。STDOUT或STDERR上的过多输出将阻塞缓冲区并导致程序和脚本挂起。此外,并非所有程序都将写入STDOUT/STDERR或从STDIN读取。如果您需要以交互方式使用命令行程序:请使用CMD或PowerShell,而不是VBScript。
pscp
是一个用于将文件从SSH服务器复制或复制到SSH服务器的程序。一旦启动,就不需要进一步的交互。如果指定了错误的密码,程序将以错误终止,并且您应该重复从请求密码到在VBScript中运行命令的步骤。否,
pscp
将在提供错误密码时再次提示输入密码,因此我希望捕获并允许输入密码。我还希望能够在复制文件时看到
pscp
输出的进度,而我目前无法使用给定的代码。如果使用参数
-batch
(您应该这样做),则无法看到。我为什么“应该”呢?我知道这在某些情况下是有用的,但这不是我在这个问题上的要求。无论如何,即使使用
-batch
pscp
输出我想要显示的进度-例如:
“filename.log | 0 kB | 0.0 kB/s | ETA:00:00 | 100%”
如果你的要求是射中自己的脚,你必须到其他地方寻求帮助。VBScript不适合您所要求的那种交互性。STDOUT或STDERR上的过多输出将阻塞缓冲区并导致程序和脚本挂起。此外,并非所有程序都将写入STDOUT/STDERR或从STDIN读取。如果需要以交互方式使用命令行程序:请使用CMD或PowerShell,而不是VBScript。