假设我有一个正在等待输入的进程server.bat open。 我怎么能让另一个进程write.bat写入该server.bat进程?
例如,server.bat进程可以响应2个命令:save-on和save-off。 我想备份server.bat正在使用的文件,但是如果服务器处于保存模式,文件会被破坏,我想要做的是将save-off命令发送到进程,进行备份和然后编写save-on以重新启用保存。
我已经尝试停止该过程,备份并重新启动它,但这通常会导致更多的文件损坏,以及当前连接到服务器的人员带来的不便
- 编辑
我想在命令行中写一个字符串,在本例中是server.bat
的一个实例。
一个简单的例子:
server.bat (无法更改)
@ECHO off
TITLE Server
:start
SET /P Command="Command: "
ECHO %Command%
GOTO :start
write.bat
@ECHO off
START server.bat
:Loop
TIMEOUT /t 5
:: So how do I target the instance of server.bat there?
ECHO "foo"> (...)?
GOTO :Loop
这两个文件都不是实际文件,只是为了澄清我的问题
您首先执行write.bat
,而server.bat
依次打开{{1}}并应该写入。
答案 0 :(得分:0)
最好的方法是包含write.vbs文件:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate "More Specific Title X"
For I = 0 to WScript.Arguments.Count - 1
WshShell.SendKeys WScript.Arguments(I) & " "
Next
WshShell.SendKeys "{ENTER}"
<强> write.bat 强>
@ECHO off
START server.bat
:Loop
TIMEOUT /t 5
START write.vbs "foo"
GOTO :Loop
<强> server.bat 强>
@ECHO off
TITLE More Specific Title X
:start
SET /P Command=
GOTO :start
警告:标题应与write.vbs中指定的字符串相同,并且应该是特定的,因为它表示进程的名称。
纯批处理的另一种方法是创建一个文本文件:
<强> server.bat 强>
@ECHO off
:start
TIMEOUT /t 1
IF NOT EXIST %1 goto start
FOR /f "delims=" %%I IN (%1) DO ECHO %%I
DEL /q %1
GOTO :start
<强> write.bat 强>
@ECHO off
SET ServerFile="%TMP%\WriteToServer"
DEL /q write.txt
START server.bat %ServerFile%
:Loop
TIMEOUT /t 5
ECHO "foo"> %ServerFile%
GOTO :Loop
第二种方式不会立即收到消息,但您可以使检查时间少于1秒。您可以在网上轻松找到类似于&#34; TIMEOUT&#34;的命令工具。但是以毫秒为单位。