CMD/BAT - Вырезать последние 2 PID из команды tasklist

Ответить
Аватара пользователя
Danya24rus

CMD/BAT - Вырезать последние 2 PID из команды tasklist

Сообщение Danya24rus »

Необходимо с помощью команды 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

Re: CMD/BAT - Вырезать последние 2 PID из команды tasklist

Сообщение Danya24rus »

Итак, удалось написать так, чтобы 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

Re: CMD/BAT - Вырезать последние 2 PID из команды tasklist

Сообщение Iska »

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

Re: CMD/BAT - Вырезать последние 2 PID из команды tasklist

Сообщение Danya24rus »

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



Код:

Код: Выделить всё

5276
5284
5392
5452
5460
5468

вычесть файл 2tmp.txt



Код:

Код: Выделить всё

5276
5284
5392
5452
5460

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



Код:

?
Аватара пользователя
Danya24rus

Re: CMD/BAT - Вырезать последние 2 PID из команды tasklist

Сообщение Danya24rus »

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



Код:

Код: Выделить всё

 
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

Re: CMD/BAT - Вырезать последние 2 PID из команды tasklist

Сообщение Iska »

Цитата Danya24rus:



вот теперь встала проблема, как…
CMD/BAT - Вырезать последние 2 PID из команды tasklist




Например, так:



Код:

Код: Выделить всё

type "3tmp.txt" | >"out.txt" findstr.exe /v /g:"2tmp.txt"
Аватара пользователя
Danya24rus

Re: CMD/BAT - Вырезать последние 2 PID из команды tasklist

Сообщение Danya24rus »

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" )

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

Вернуться в «Скриптовые языки администрирования Windows»