繁体   English   中英

远程操纵批处理文件的执行

[英]Remotely manipulating the execution of a batch file

我有一个批处理文件,该文件位于从另一台计算机远程调用的一台计算机上。 该批处理文件非常简单。 它所做的全部工作就是设置一些环境变量,然后执行一个应用程序-该应用程序创建一个命令窗口并在其中执行。 除非有人在执行“退出”的命令窗口中键入命令,否则它将执行的应用程序将永远运行,这时它将进行一些最终处理并干净地退出。 如果我仅关闭命令窗口,则出口不干净,并且由于与该应用程序生成的数据相关的多种不同原因,这是不好的。 我是否可以编写另一批脚本,将“ quit”命令插入第一个命令窗口,然后退出?

听起来像我期望使用的工作类型,尽管我从未在Windows下使用过。

您可以使用<从文本文件(而不是控制台)中获取“退出” ...,但这会在加载后立即退出您的进程。 那行得通吗? 否则,您可以编写一个程序以将击键发送到控制台...但是我认为这不是生产质量的把戏。

您可以访问该应用程序的实际代码吗? 如果是这样,您可以检查批处理文件。 否则,您可以使用powershell进行以下操作。

    $Process = Get-Process | Where-Object {$_.ProcessName -eq "notepad"}If (!($Process))
{   "Process isn't running, do stuff"
}Else
{   $myshell.AppActivate("notepad")
    $myshell.sendkeys("Exit")
}

我只是建议使用powershell,因为它易于您调用代码。 您还可以将其放入循环中,然后等待其运行。

回覆

我会使用python中的subprocess模块​​编写一个小脚本,如下所示:

from subprocess import Popen, PIPE
import os
import os.path
import time

app = Popen(['c:/path/to/app.exe', 'arg1', 'arg2'], stdin=PIPE, env = {
    'YOUR_ENV_VAR_1': 'value1',
    'YOUR_ENV_VAR_2': 'value2',
    # etc as needed to fill environment
    })

while not os.path.exists('c:/temp/quit-app.tmp'):
    time.sleep(60)

app.communicate('quit\n')

print "app return code is %s" % app.returncode

然后,您要在要关闭时远程调用创建c:/temp/quit-app.tmp的批处理脚本,等待几分钟,然后删除该文件。

自然,您需要在Windows机器上安装Python才能正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM