0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 4
1

Завершение процесса cmd по имени окна

12.01.2019, 17:42. Показов 3058. Ответов 6
Метки нет (Все метки)

Здравствуйте все.

Фрагмент исполняемого bat файла:
Кликните здесь для просмотра всего текста
Windows Batch file
1
2
3
4
5
6
tasklist /v /fi "imagename eq cmd.exe" /fo csv /nh |findstr Profile1>nul
if "%errorlevel%"=="0" (
    for /f "tokens=2 delims==," %%i in ('tasklist /v /fi "imagename eq cmd.exe" /fo csv^|find/i "Profile1"') do set idKill=%%i
    echo.%idKill%
    taskkill /pid %idKill%
    pause
)


Не получается присвоить значение переменно idKill, соответственно не отрабатывает taskkill. Не могу понять в чем проблема?
Миниатюры
Завершение процесса cmd по имени окна  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2019, 17:42
Ответы с готовыми решениями:

Проверка наличия запущенного процесса cmd.exe по имени его окна
Очень нужна ваша помощь! Суть: необходимо в БАТнике провести проверку на предмет запущенного...

Завершение процесса по заголовку окна
Всем привет! Парни помогите реализовать мою задачу. Задача такова: Завершать процессы по оконному...

Завершение процесса без запуска окна командной строки
Нужен батник который бы автоматически киллял процесс без запуска самого батника(чтобы он быстро...

Ожидание завершение процесса
Добрый день у меня есть бат файл который открывает несколько программ, ну должен по крайне мере)...

6
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 4
12.01.2019, 19:52  [ТС] 2
Цитата Сообщение от Zergii Посмотреть сообщение
for /f "tokens=2 delims==," %%i in ('tasklist /v /fi "imagename eq cmd.exe" /fo csv^|find/i "Profile1"') do set idKill=%%i
по идее эта конструкция должна записывать в переменную idKill значение id найденного процесса.
но почему-то переменная остается пустой и соответственно
taskkill /pid %idKill%
выдает что значение id не введено
0
Любознательный
2362 / 830 / 223
Регистрация: 10.03.2016
Сообщений: 1,917
12.01.2019, 21:45 3
Цитата Сообщение от Zergii Посмотреть сообщение
в чем проблема?
Windows Batch file
1
2
3
4
5
6
@echo off
for /f "tokens=2 delims==" %%a in (
'"wmic process where (name="cmd.exe" and commandline like "%%%random%%random%%%") get parentprocessid /value"'
) do set pid=%%a
echo %pid%
pause
2
4310 / 2103 / 656
Регистрация: 26.04.2015
Сообщений: 6,796
13.01.2019, 01:16 4
Zergii,
если вы запускаете cmd со строкой внутри
Windows Batch file
1
title Profile1
то поиск его такой строкой понятен
Цитата Сообщение от Zergii Посмотреть сообщение
tasklist /v /fi "imagename eq cmd.exe" /fo csv /nh |findstr Profile1>nul
знак = здесь ["tokens=2 delims==,"] вероятно лишний, но и с ним все работает:
Завершение процесса cmd по имени окна
2
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 4
13.01.2019, 07:52  [ТС] 5
Спасибо за ваш ответ.

Я не очень понимаю работу wmic и операторов командной строки, в вашем примере мне непонятна конструкция %%перем1перем2%%.
Windows Batch file
1
name="cmd.exe" and commandline like "%%%random%%random%%%"
Эта конструкция всегда ссылается на процесс самого скрипта поиска. Я пробовал заменить на %%%random%%Profile1%%% и %%%Profile1.bat%%%, всегда результатом будет процесс текущего скрипта(хотя колонка commandline для процессов cmd.exe содержит значение содержащее Profile1.bat). Возможно не работает фильтр and commandline like.

Если поставить просто Profile5.bat или *Profile5.bat*, то выдает ошибку "No Instance(s) Available".
0
Любознательный
2362 / 830 / 223
Регистрация: 10.03.2016
Сообщений: 1,917
13.01.2019, 08:09 6
Лучший ответ Сообщение было отмечено Zergii как решение

Решение

Цитата Сообщение от Zergii Посмотреть сообщение
выдает что значение id не введено
А, да, что-то мы тут не туда повернули... всё работать должно, но только внутри скобок необходимо использовать значения переменных с отложенным раскрытием... либо прибивать процессы за скобками:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tasklist /v /fi "imagename eq cmd.exe" /fo csv /nh |findstr Profile1>nul
if "%errorlevel%"=="0" (
    for /f "tokens=2 delims=," %%i in ('tasklist /v /fi "imagename eq cmd.exe" /fo csv^|find/i "Profile1"') do (
        set idKill=%%i
        call :kill
    )
)
pause&goto next
 
:kill
echo.%idKill%
taskkill /pid %idKill%
exit /b
 
:next
exit /b
Добавлено через 12 минут
Цитата Сообщение от Zergii Посмотреть сообщение
мне непонятна конструкция %%перем1перем2%%.
Не заморачивайтесь, тот пакетник немного для другого случая, в нем заложен код для получения PID текущего окна cmd, т.е. того, в котором запущен этот код, а в Вашем случае необходимо получать PID по title другого окна cmd...
2
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 4
13.01.2019, 08:20  [ТС] 7
Спасибо за ваш ответ.

Да, я использую конструкцию при запуске bat файлов.
Windows Batch file
1
title Profile1
Я "решил" свою задачу искользуя конструкцию:
Windows Batch file
1
2
for /f "tokens=2 delims==," %%i in ('tasklist /v /fi "imagename eq cmd.exe" /fo csv^|find/i "Profile5"') do set idKill=%%i
            taskkill /pid %idKill%
Просто изначально я предполагал следующий порядок действий:
1. поиск cmd.exe с заголовком содержащим Profile*
2. если окно не найдено, то ищем окна с Profile(1-5) и убиваем их
3. запускаем bat файл с применением нужного профиля.

Оказалось, что конструкция
Windows Batch file
1
if "%errorlevel%"=="0"
не дает присвоить значение set idKill=%%i, значение оказывается пустым (команда echo.%idKill% выдает пустоту).
В результате taskkill /pid %idKill% выдает ошибку.

Добавлено через 8 минут
Цитата Сообщение от YuS_2 Посмотреть сообщение
А, да, что-то мы тут не туда повернули...
Спасибо, это удивительно, ваша конструкция практически повторяет то что я задумывал изначально, и главное она у вас работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2019, 08:20

Завершение процесса с подтверждением
echo off echo y | taskkill /im `123.exe pause При завершении появляется системное окошко...

Завершение сеанса при закрытии процесса
Я профан, но пытаюсь разобраться :wall: Пользователь подключается к по RDP к серверу, мне надо...

Завершение только определенного процесса через ВАТ
Всем привет! Ситуация такая, есть процесс программы который называется info.exe, таких процессов...

Завершение запущенного процесса по Process ID после прерывания основного
Вопрос такой, требуется: 1) Запустить процесс в скрытом\свёрнутом окне 2) Завершить его после...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru