如何从文本文件中提取特定数据并在批处理文件中添加为变量

时间:2014-07-07 20:44:06

标签: batch-file

我正试图找到一种方法来拉动正在运行的某个进程的路径。

我所拥有的是两个以相同名称运行的进程。我有一个批处理脚本,它将查看日志文件,查找不时发生的特定错误。当找到它时,我想重新启动该应用程序。问题是这些运行有多个,所以我需要知道如何重新启动特定的。我有脚本将查找错误并重新启动。我还找到了一种方法将每个进程的信息提取到一个文本文件中。我从那里难过。

批量重启过程:

Set Current_Date=%date:~10,4%-%date:~4,2%-%date:~7,2%

findstr /m "OutOfMemoryException" c:\progra~1\APP1\logs\%Current_Date%.log
if %errorlevel%==0 (
   goto Restart_app
) else (
   goto end
)

:Restart_app
set /p PID=<C:\progra~1\app1\app1.txt
taskkill /PID %PID% /T /F

cd "C:\Program Files\APP1"
Start "" "C:\Program Files\APP1\APP"

:end

提取信息的命令是:

WMIC /OUTPUT:C:\progra~1\APP\ProcessList.txt PROCESS where Caption="APP.exe" get Commandline,Processid

结果如下:

Caption    CommandLine                                                               ProcessId  
APP.exe  "C:\Program Files\APP2\APP.exe" {FC6B21FF-34A5-4e21-B22E-DD36573B6C10}  3988       
APP.exe  "C:\Program Files\APP1\APP.exe" {89295D77-02D1-4487-95B6-C86E6915C909}  5156     

好奇如何将路径和processid转换为可用于重新启动有问题的特定应用程序的变量。目前我将杀死这两个应用程序。任何帮助表示赞赏。感谢。

更新

新的批处理文件,用于在应用程序运行后根据以下建议启动应用程序与拉取信息时提取进程ID。唯一的问题是,这样做是从C:\ program files \ System32目录开始的。我知道这是因为所有日志文件都添加到system32目录中,并且app不会运行,因为它需要来自其自己目录的文件。

@echo off
cd /d "%~dp0"
for /f "tokens=2 delims==; " %%a in (' wmic process call create "c:\program files\app1\app.exe app-parameters" ^| find "ProcessId" ') do set PID=%%a
Echo %PID% > App1.txt

1 个答案:

答案 0 :(得分:0)

您需要在启动时捕获可执行文件的PID,这可以通过使用WMIC启动它来完成。然后,Taskkill可以通过PID信息将其终止。

@echo off
for /f "tokens=2 delims==; " %%a in (' wmic process call create "notepad.exe" ^| find "ProcessId" ') do set PID=%%a
echo "%PID%"
pause