【问题标题】:Interact with executable invoked from batch file与从批处理文件调用的可执行文件交互
【发布时间】:2014-03-10 16:42:19
【问题描述】:

我有一个可执行文件,可以打开命令提示符并连接到 FTP。我们通过在命令窗口中手动输入getput 命令来使用它来下载和上传文件。我的最终目标是通过使用ASP.NET 控制台应用程序或批处理文件来自动化FTP 过程,其中任何一个都可以。我尝试在批处理文件中调用可执行文件,然后调用 ftp 命令,但它会等待可执行文件退出,然后再运行批处理文件中的下一个命令。

"C:\MyFtp.exe" get ‘FtpFile.txt’ C:\temp\MyFile.txt timeout /t 5

为了说明,如果我打开上面的批处理文件,我希望它在MyFtp.exe 可执行文件中执行get 命令。但相反,它会等待我输入quit,然后再执行其他命令。有人有什么建议吗?

【问题讨论】:

  • 它是否支持从其他地方读取输入取决于您的 FTP 程序。试试MyFtp.exe < commands.txt,其中 commands.txt 包含 FTP 命令。你能告诉我们程序的名称吗?如果没有,您可以看看MyFtp.exe /?MyFTP.exe -help 并发布结果吗?
  • MyFTP.exe -help 返回错误。当我正确打开它时,命令提示符会显示CDFTP:,我可以在那里输入help,它会显示所有常见的ftp命令。 MyFTP.exe 是我们从另一家公司继承的自定义可执行文件,我们没有得到任何关于它的文档。
  • MyFTP.exe < commands.txt 怎么样?您不能使用任何其他 FTP 程序是否有充分的理由?
  • MyFTP.exe < commands.txt 实际上确实有效。我最初在VB.NET 中使用Process 类并指定StandardInput,以便我可以这样输入命令(类似于下面Rich 的答案),但这更干净。谢谢! @ThomasW。

标签: asp.net shell batch-file ftp cmd


【解决方案1】:

这是一个 vbscript,可以满足您的要求。您可以通过批处理文件“C:\windows\system32\cscript.exe C:\my\file\location.vbs”激活它,或者如果您在 32 位系统上直接激活它。查看 vbscript 信息部分以获取更多详细信息。

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("""C:\my folder loc\MyFtp.exe""")'Keep double quotes for specific path names

Do Until Success = True
    Success = objShell.AppActivate("Untitle - FTP") ' Put application title text here (e.g. Untitle - Notepad)
    Wscript.Sleep 1000
Loop
enter code here
objShell.SendKeys "get 'FtpFile.Txt' C:\temp\MyFile.txt"
objShell.SendKeys "~" 'enter
objShell.SendKeys "timeout /t 5"
objShell.SendKeys "~" 'enter

【讨论】:

  • 这应该可以工作,因为我在VB.NET 中使用了Process 类并指定了StandardInput,所以我可以用这种方式输入命令,这是使用相同的想法。
猜你喜欢
  • 2013-03-01
  • 1970-01-01
  • 2016-09-09
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多