【问题标题】:I need help using VBScript to control a commandline program我需要帮助使用 VBScript 来控制命令行程序
【发布时间】:2014-06-20 17:19:19
【问题描述】:

使用类似的 VBScript(只是一个示例)

result = MsgBox ("Would you like to install the AntrixAPI?", vbYesNo, "Installing AntrixAPI")

Select Case result
Case vbYes
MsgBox("The API will be installed.")
Case vbNo
MsgBox("The API will not be install.")
End Select

我如何使用它来控制命令行程序。假设用户选择了是。然后,只有当用户选择“是”时,该命令才会转到某个点。 (示例命令)

@echo off
:UserSelectedYes
REM This is where the prompt would go if the user selected yes
wget http://www.example.com/thisisafakedomain/api/antrix
:UserSelectedNo
REM This is where the prompt would go if the user selected no
end

这可能吗?

【问题讨论】:

标签: windows batch-file vbscript


【解决方案1】:

您可以创建一个 MS-DOS 进程并执行您想要的每个脚本!

就像这样:

Dim oProcess As New Process
With (oProcess.StartInfo)
   .Arguments = "/k <command> & <command> & <command> & exit"
    .FileName = "cmd.exe"
    .WindowStyle = ProcessWindowStyle.Hidden
    .CreateNoWindow = True
End With
oProcess.Start()

这不是最好和最文雅的方式,而是最快的方式。 我不确切知道,如果这是你想要的。因此,请随意重新定义您的问题,您的要求不是很清楚!

【讨论】:

  • 这有点像我想要的。假设我有一个 MS-DOS 命令,它调用文件script.vbs。该文件使用是/否框提示用户。如果用户选择yes 选项,那么script.vbs 将转到调用script.vbs 的同一个.bat/.cmd 程序,并将转到某个标签并且只运行那个标签。
  • 哦,你想用vbs吗? (我以为你的意思是 VB)这是个问题,因为 vbs 不能使用 Process 类。好吧,你的问题变得更复杂了。你为什么不问用户,他在你的 *.bat 脚本中想要什么?
  • 我已经考虑过这样做(它会变得不那么复杂),但 .vbs 脚本对用户更友好。
【解决方案2】:

这是在 vbscript 中下载文件的方法。

 On Error Resume Next
 Set File = WScript.CreateObject("Microsoft.XMLHTTP")
 File.Open "GET", "http://www.pepperresources.org/LinkClick.aspx?fileticket=B1doLYYSaeY=&tabid=61", False
 'This is IE 8 headers
 File.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; BCD2000; BCD2000)"
 File.Send
 If err.number <> 0 then 
    line =""
    Line  = Line &  vbcrlf & "" 
    Line  = Line &  vbcrlf & "Error getting file" 
    Line  = Line &  vbcrlf & "==================" 
    Line  = Line &  vbcrlf & "" 
    Line  = Line &  vbcrlf & "Error " & err.number & "(0x" & hex(err.number) & ") " & err.description 
    Line  = Line &  vbcrlf & "Source " & err.source 
    Line  = Line &  vbcrlf & "" 
    Line  = Line &  vbcrlf & "HTTP Error " & File.Status & " " & File.StatusText
    Line  = Line &  vbcrlf &  File.getAllResponseHeaders
    wscript.echo Line
    Err.clear
    wscript.quit
 End If

On Error Goto 0

 Set BS = CreateObject("ADODB.Stream")
 BS.type = 1
 BS.open
 BS.Write File.ResponseBody
 BS.SaveToFile "c:\users\test.txt", 2

【讨论】:

  • 这不是我真正想要的。由于弹出框,我只希望使用 VBS 提示用户。我真的希望所有功能都在 CMD 窗口中完成。
  • choice /c yn /m "Install ABC" if errorlevel 1 wget "http://etc" if errorlevel 2 goto :eof
【解决方案3】:

您的 VBScript 可以像这样简单:

WScript.Quit MsgBox("Would you like to install the AntrixAPI?", vbYesNo, "Installing AntrixAPI")

从您的批处理文件中调用它并测试返回值。 vbYes 的值为 6,vbNo 的值为 7。

@echo off
cscript c:\test.vbs

if %errorlevel%==6 goto UserSelectedYes
if %errorlevel%==7 goto UserSelectedNo

【讨论】:

  • 目前正在对此进行测试。我会看看情况如何。编辑:使用它,它会打开一个 CMD 窗口(在正确的目录中),但它不会执行我在标签下设置的命令。它只是打开 CMD 窗口等待用户输入命令
  • 我已经把它放在我拥有的call test.vbs 中,它的作用是给我一些错误,然后打开另一个 CMD 窗口等待用户执行命令。
  • 您是否要返回到您的原始批处理文件?还是推出一个新的?
  • 返回原始文件。不过没关系,我找到了解决办法。
  • 好的,很好。我刚刚更新了我的,以展示如何恢复原样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2018-11-04
  • 1970-01-01
相关资源
最近更新 更多