簡體   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