DOS批处理文件在专有Java应用程序中输入命令并接收反馈?

Posted

技术标签:

【中文标题】DOS批处理文件在专有Java应用程序中输入命令并接收反馈?【英文标题】:DOS batch file to enter commands in proprietary java app and receive feedback? 【发布时间】:2011-02-06 20:15:22 【问题描述】:

我正在开展一个项目,我希望能够通过高频啁啾在杜克智能家居中打开和关闭灯。照明系统称为 Clipsal Square-D,而允许用户访问照明控制的程序称为 CGate。我打算在 Matlab 中进行一些信号处理,然后从 Matlab 创建一个批处理文件以与 Cgate 交互。 Cgate 是一个专有的 Java 应用程序,如果从 DOS 命令行运行,它会打开另一个看起来像 DOS 命令提示符的窗口。我有一个批处理文件,可以检查 Cgate 是否正在运行,如果没有,请打开它。

但我不知道该怎么做实际上是从批处理文件中运行 Cgate 程序中的命令,同样地,从 Cgate 获取响应。此类命令的一个示例是“noop”,它应该返回“200 OK”。

任何帮助将不胜感激!提前非常感谢你:)

(顺便说一下,这是我现有的批处理文件)

@ECHO off

goto checkIfOpen

:checkIfOpen

REM pv finds all open processes and puts it in result.txt
%SystemRoot%\pv\pv.exe
%SystemRoot%\pv\pv.exe > result.txt

REM if result has the word notepad in it then notepad is running
REM if not then it opens notepad
FIND "notepad.exe" result.txt
IF ERRORLEVEL 1 START %SystemRoot%\system32\Clipsal\C-Gate2\cgate.exe

goto end

:end

【问题讨论】:

【参考方案1】:

我不知道如何在 Windows 上执行此操作,但在 UNIX 上,有一个名为 expect 的程序专为此类任务而设计。如果你安装了Cygwin,你应该可以在Windows上使用expect实用程序了。

【讨论】:

我下载了expect,但我不明白如何将它合并到批处理文件中——您还有什么关于语法之类的提示吗? 我看了更多的东西,发现“cygwin 的 Expect 在 Cygwin 下可以正常工作,只要你期望的是一个 cygwin 应用程序。它不适用于普通/本机 Win32 控制台应用程序。”所以我尝试使用 ActiveState 的版本,但被难住了。【参考方案2】:

您正在调用start cgate.exe,这将导致 cgate.exe 在新窗口中启动。首先,您可能希望在同一窗口中运行 cgate,这意味着您应该删除 start

其次,您可以使用 shell 重定向将命令从文本文件传递到 cgate 的 STDIN,如下所示:

cgate.exe < commands.txt

可能会起作用,但可能不会,这取决于 cgate.exe 实际接收数据的方式。

如果您想进行双向通信,即发送数据、获取响应,然后根据响应的内容发送更多数据,则必须使用批处理文件以外的其他方式。大多数脚本语言(perl、python)都可以用于此目的,或者 C 或其他任何语言。

【讨论】:

以上是关于DOS批处理文件在专有Java应用程序中输入命令并接收反馈?的主要内容,如果未能解决你的问题,请参考以下文章

用bat批处理程序通过DOS命令行删除所有的空文件夹

01_Java 开发环境搭建丶第一个Java程序

使用批处理文件控制dos用户输入

java文件用dos命令运行

dos的操作流程 怎么弄成批处理bat

为啥我在输入dos指令后总显示" 不是内部或外部命令,也不是可运行的程序或批处理文件”?