Войти

Показать полную графическую версию : Вырезать последние 2 PID из команды tasklist


Danya24rus
22-08-2016, 17:48
Необходимо с помощью команды 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
Итак, удалось написать так, чтобы 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
Зачем Вам подобные извращения?

Danya24rus
22-08-2016, 18:24
Iska, а каким еще образом можно закрыть последнюю открытую вкладку с помощью консоли?

Danya24rus
22-08-2016, 18:51
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
Соорудил вот такую вот фиговину

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
вот теперь встала проблема, как… »
Например, так:
type "3tmp.txt" | >"out.txt" findstr.exe /v /g:"2tmp.txt"

Danya24rus
22-08-2016, 19:45
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
Danya24rus, Вам лучше стоит «копать» в сторону iMacros for Chrome - Интернет-магазин Chrome (https://chrome.google.com/webstore/detail/imacros-for-chrome/cplklnmnlbnpmjogncfgfijoopmnlemp). Начните отсюда: iMacros for Chrome - iMacros (http://wiki.imacros.net/iMacros_for_Chrome).




© OSzone.net 2001-2012