Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用批处理将命令写入进程_Batch File_Command Line_Process_Console - Fatal编程技术网

Batch file 如何使用批处理将命令写入进程

Batch 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正在使用的文件,但这些文件会损坏。如果服务器处于“保存打开”模式,我想做的是向进程发送“保存关闭”命令,进行备份,然后写入“保存打开”以重新启用保存 我尝试过停止进程,备份并重新启动它,但这通常会导致更多的文件损坏,以及给当前连接到服务器的用户带

假设我打开了一个正在等待输入的process server.bat。 如何使另一个进程write.bat写入该server.bat进程

例如,具有的server.bat进程可以响应两个命令:save on和save off。 我想备份server.bat正在使用的文件,但这些文件会损坏。如果服务器处于“保存打开”模式,我想做的是向进程发送“保存关闭”命令,进行备份,然后写入“保存打开”以重新启用保存

我尝试过停止进程,备份并重新启动它,但这通常会导致更多的文件损坏,以及给当前连接到服务器的用户带来不便

-编辑

我想在命令行中写入一个字符串,在本例中是server.bat的实例

一个简单的例子:

无法更改的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