Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Вырезать последние 2 PID из команды tasklist (http://forum.oszone.net/showthread.php?t=318060)

Danya24rus 22-08-2016 17:48 2662167

Вырезать последние 2 PID из команды tasklist
 
Необходимо с помощью команды tasklist /FI "IMAGENAME eq chrome.exe" /FO table /nh > 1.txt
Которая сохранит в файл 1.txt(кстати, не обязательно в файл, но я думаю по-другому тут никак)
сохранится что-то вроде этого
Код:

chrome.exe                    7108 Console                    1  164*556 КБ
chrome.exe                    5260 Console                    1    90*688 КБ
chrome.exe                    2632 Console                    1  161*952 КБ
chrome.exe                    2180 Console                    1    97*880 КБ
chrome.exe                    1452 Console                    1  100*072 КБ

После этого если открыть в хроме дополнительную вкладку, то появятся 2 новых PID к примеру
выполнить вторую команду tasklist /FI "IMAGENAME eq chrome.exe" /FO table /nh > 1.txt
Код:

chrome.exe                    7108 Console                    1  164*832 КБ
chrome.exe                    5260 Console                    1    90*704 КБ
chrome.exe                    2632 Console                    1  163*372 КБ
chrome.exe                    2180 Console                    1  103*932 КБ
chrome.exe                    1452 Console                    1  132*600 КБ
chrome.exe                    7208 Console                    1    91*460 КБ
chrome.exe                    4960 Console                    1    11*580 КБ

И из получившегося файла вычеркнуть все равные строчки первого файла, останутся только 2 последнии
Код:

chrome.exe                    7208 Console                    1    91*460 КБ
chrome.exe                    4960 Console                    1    11*580 КБ

Из них каким-то образом достать PID (4х значное число) и записать его в переменную, которую удалить с помощью taskill. Реально ли это все проделать через командную строку? Если коротко, то у меня скрипт открывает новую вкладку, которую через 10 секунд нужно закрыть, на данный момент я могу закрыть только весь браузер целиком, но удалось выяснить, что одна вкладка пораждает 2 новых PID, а остальные не изменяются, хотелось бы воспользоваться этим, но не знаю как.
А, еще стоит заметить, что в 1ом и 2ом файле значение PID не меняются, однако, значение используемой памяти изменяется, то есть нужно сначала отфильтровать 1ый файл так, чтобы остались только значения PID, потом так же отфильровать второй файл и уже так получить третий.

Danya24rus 22-08-2016 18:03 2662178

Итак, удалось написать так, чтобы 2 файла сохранялись в виде
Код:

5276
5284
5392
5452
5460
5468
5964

Код:

tasklist /FI "IMAGENAME eq chrome.exe" /FO table /nh > 1tmp.txt
for /f "tokens=2" %%i in (1tmp.txt) do (>>2tmp.txt echo %%i)
chrome.exe
del 1tmp.txt
ping 127.0.0.1 -n 10 >nul
tasklist /FI "IMAGENAME eq chrome.exe" /FO table /nh > 1tmp.txt
for /f "tokens=2" %%i in (1tmp.txt) do (>>3tmp.txt echo %%i)
del 1tmp.txt

Каким образом теперь из файла 3tmp.txt вычесть строки, которые содержаться в файле 2tmp.txt и сохранить, к примеру, в файле 4tmp.txt и на оставшиеся применить команду taskill %PID% ?

Iska 22-08-2016 18:19 2662184

Зачем Вам подобные извращения?

Danya24rus 22-08-2016 18:24 2662190

Iska, а каким еще образом можно закрыть последнюю открытую вкладку с помощью консоли?

Danya24rus 22-08-2016 18:51 2662200

Iska, так вот теперь встала проблема, как из файла 3tmp.txt
Код:

5276
5284
5392
5452
5460
5468

вычесть файл 2tmp.txt
Код:

5276
5284
5392
5452
5460

чтобы получился 3ий файл out.txt
Код:

5468
?

Danya24rus 22-08-2016 19:23 2662211

Соорудил вот такую вот фиговину
Код:


for /f "tokens=*" %%i in (3tmp.txt) do (
    for /f "tokens=*" %%k in (2tmp.txt) do (
        if "%%i"=="%%k" (set /a param="flag") )
    & if not "%param%"=="flag" ( echo %%i ) & (set /a param="notflag")) >> output.txt

Но он код не работает, выводит всё подряд. Логика такая, что если в цикле находится строка равная строке из другого файла, то поднимается флаг и строка не выводится и флаг опускаетя, если такой строки не нашлось, то флаг не поднимается и мы выводим наш PID и опускаем флаг, и снова идем искать. Но на деле это почему-то не работает.

Iska 22-08-2016 19:30 2662214

Цитата:

Цитата Danya24rus
вот теперь встала проблема, как… »

Например, так:
Код:

type "3tmp.txt" | >"out.txt" findstr.exe /v /g:"2tmp.txt"

Danya24rus 22-08-2016 19:45 2662222

Iska, огромная благодарность, очень помогли, итоговый код выглядит так:
Код:

tasklist /FI "IMAGENAME eq chrome.exe" /FO table /nh > 1tmp.txt
for /f "tokens=2" %%i in (1tmp.txt) do (>>2tmp.txt echo %%i)
ping 127.0.0.1 -n 2 >nul
chrome.exe --new-tab ""
ping 127.0.0.1 -n 10 >nul
del 1tmp.txt
ping 127.0.0.1 -n 2 >nul
tasklist /FI "IMAGENAME eq chrome.exe" /FO table /nh > 1tmp.txt
for /f "tokens=2" %%i in (1tmp.txt) do (>>3tmp.txt echo %%i)

del 1tmp.txt
type "3tmp.txt" | >"out.txt" findstr.exe /v /g:"2tmp.txt"

for /f "tokens=*" %%i in (out.txt) do (taskkill /f /PID "%%i" )

Однако я не учел тот факт, что завершение этого пида не приводит к закрытию конкретной вкладки, а она просто крашится, но" это уже совсем другая история"(с)

Iska 22-08-2016 20:02 2662230

Danya24rus, Вам лучше стоит «копать» в сторону iMacros for Chrome - Интернет-магазин Chrome. Начните отсюда: iMacros for Chrome - iMacros.


Время: 22:22.

Время: 22:22.
© OSzone.net 2001-