简体   繁体   中英

Remotely manipulating the execution of a batch file

I have a batch file that is located on one machine that I am invoking remotely from another machine. That batch file is pretty simple; all it does is set some environment variables and then executes an application - the application creates a command window and executes inside of it. The application it executes will run forever unless someone types in the command window in which it is executing "quit", at which point it will do some final processing and will exit cleanly. If I just close the command window, the exit is not clean and that is bad for a number of different reasons related to the data that this application produces. Is there a way for me to perhaps write another batch script that will insert the "quit" command into the first command window and then exit?

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

You could use the < to take the "quit" from a text file instead of the console... but that would quit your process as soon as it loads. Would that work? Otherwise you could write a program to send keystrokes to the console... but I don't think this is a production quality trick.

Do you have access to the actual code of the application? if so you can check for a batch file. Else you can do something like the following using powershell.

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

I am only suggesting powershell as its easy for you to call the code. you could also put in a loop and wait for it to run.

RE

I'd write a little script using the subprocess module in python, like so:

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

Then, you remotely invoke a batch script that creates c:/temp/quit-app.tmp when you want to shut down, wait a couple of minutes, and then deletes the file.

Naturally, you need Python installed on the Windows machine for this to work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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