Batch file 如何使用批处理将命令写入进程
假设我打开了一个正在等待输入的process server.bat。 如何使另一个进程write.bat写入该server.bat进程 例如,具有的server.bat进程可以响应两个命令:save on和save off。 我想备份server.bat正在使用的文件,但这些文件会损坏。如果服务器处于“保存打开”模式,我想做的是向进程发送“保存关闭”命令,进行备份,然后写入“保存打开”以重新启用保存 我尝试过停止进程,备份并重新启动它,但这通常会导致更多的文件损坏,以及给当前连接到服务器的用户带来不便 -编辑 我想在命令行中写入一个字符串,在本例中是server.bat的实例 一个简单的例子: 无法更改的server.batBatch file 如何使用批处理将命令写入进程,batch-file,command-line,process,console,Batch File,Command Line,Process,Console,假设我打开了一个正在等待输入的process server.bat。 如何使另一个进程write.bat写入该server.bat进程 例如,具有的server.bat进程可以响应两个命令:save on和save off。 我想备份server.bat正在使用的文件,但这些文件会损坏。如果服务器处于“保存打开”模式,我想做的是向进程发送“保存关闭”命令,进行备份,然后写入“保存打开”以重新启用保存 我尝试过停止进程,备份并重新启动它,但这通常会导致更多的文件损坏,以及给当前连接到服务器的用户带
@ECHO off
TITLE Server
:start
SET /P Command="Command: "
ECHO %Command%
GOTO :start
write.bat
这两个文件都不是实际文件,只是为了澄清我的问题。
首先执行write.bat,该命令将打开server.bat并向其写入。最好的方法是包含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
server.bat
警告:标题应与write.vbs中指定的字符串相同,并且应是特定的,因为它指示进程的名称
在纯批处理中执行此操作的另一种方法是创建文本文件:
server.bat
write.bat
第二种方式不会立即接收消息,但您可以使检查时间少于1秒。您可以在web上轻松找到类似于TIMEOUT的命令工具,但以毫秒为单位。查看Wscript的AppActivate和SendKeys方法。据我所知,没有纯批处理解决方案,但可以使用batch/JScript混合解决方案来完成所需的任务。
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}"
@ECHO off
START server.bat
:Loop
TIMEOUT /t 5
START write.vbs "foo"
GOTO :Loop
@ECHO off
TITLE More Specific Title X
:start
SET /P Command=
GOTO :start
@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
@ECHO off
SET ServerFile="%TMP%\WriteToServer"
DEL /q write.txt
START server.bat %ServerFile%
:Loop
TIMEOUT /t 5
ECHO "foo"> %ServerFile%
GOTO :Loop