|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - закрыть определенное количество калькуляторов, а не все сразу |
|
|
CMD/BAT - закрыть определенное количество калькуляторов, а не все сразу
|
Новый участник Сообщения: 9 |
пытаюсь сделать лабу.. универ.. Создать файл bat который выполняет следующее: На вход пакетному файлу приходит число ( N ) (как параметр пакетного файла). Открывается N калькуляторов (программно), затем закрываются все запущенные калькуляторы, кроме одного. - мое задание. вот мой код
@echo off cd c:\windows\system32 set /p p=N= for /l %%a in (1,1,%p%) do start " " calc.exe && timeout /t 1 && cls set /a i=%p%-1 for /l %%b in (1,1,%i%) do taskkill /f /im Calculator.exe && timeout /t 1 && cls pause первая половина работает отлично, т.е открывается введенное мной число калькуляторов, но закрываются все, а мне нужно чтобы закрылись все, кроме одного. Думаю проблема в команде taskkill, пробовал exit, тож не робит( Спасибо заранее. |
|
Отправлено: 16:59, 16-09-2018 |
Ветеран Сообщения: 2196
|
Профиль | Отправить PM | Цитировать Khmel_19, убивайте по PID
|
Отправлено: 18:17, 16-09-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать sov44, так фишка в том, что хоть 100 калькуляторов будет запущено, pid будет "одинаковый и общий" для всех
|
Отправлено: 18:52, 16-09-2018 | #3 |
Ветеран Сообщения: 2196
|
Профиль | Отправить PM | Цитировать Цитата Khmel_19:
Khmel_19, например так |
|
Отправлено: 19:12, 16-09-2018 | #4 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать sov44, C:\Users\я>tasklist | find /i "calculator.exe"
Calculator.exe 7604 Console 3 57*784 КБ при запущенных 2ух калькуляторах, код не робит, ну или я его не так использую. Мою задачу он не решает, но спасибо) |
|
Отправлено: 19:43, 16-09-2018 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Khmel_19:
Цитата Khmel_19:
Цитата Khmel_19:
Предположим, пусть это будет последний запущенный: @echo off setlocal enableextensions enabledelayedexpansion set iCount=%~1 if defined iCount ( for /l %%i in (1, 1, %iCount%) do ( for /f "usebackq delims=" %%j in (`wmic.exe Process call Create "calc.exe" ^| find.exe /i "ProcessId"`) do for /f "tokens=2 delims==; " %%k in ("%%j") do ( set sProcessID%%i=%%~k ) ) set sProcessID pause set /a iCount -= 1 for /l %%i in (1, 1, !iCount!) do ( >nul wmic.exe Process where "ProcessID='!sProcessID%%i!'" call Terminate 0 ) ) else ( echo Usage: %~nx0 ^<Count^> exit /b 1 ) endlocal exit /b 0 |
|||
Отправлено: 20:18, 16-09-2018 | #6 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Iska, мало что понял из выше написанного, но точно понял что это не работает.sov44, у меня 10 винда, поэтому pid не подходит
|
Отправлено: 20:36, 16-09-2018 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Khmel_19:
Или, может быть, Вы не знаете, что такое «параметр пакетного файла» и как его задавать? Цитата Khmel_19:
|
||
Отправлено: 21:12, 16-09-2018 | #8 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата Khmel_19:
Iska, прошу использовать не калькуляторы а блакноты |
|
Отправлено: 22:50, 16-09-2018 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Khmel_19, хорошо.
1. Копируете в буфер обмена следующий код: @echo off
setlocal enableextensions enabledelayedexpansion
set iCount=%~1
set sProcessName=notepad.exe
if defined iCount (
for /l %%i in (1, 1, %iCount%) do (
for /f "usebackq delims=" %%j in (`wmic.exe Process call Create "%sProcessName%" ^| find.exe /i "ProcessId"`) do for /f "tokens=2 delims==; " %%k in ("%%j") do (
set sProcessID%%i=%%~k
)
)
set sProcessID
pause
set /a iCount -= 1
for /l %%i in (1, 1, !iCount!) do (
>nul wmic.exe Process where "ProcessID='!sProcessID%%i!'" call Terminate 0
)
) else (
echo Usage: %~nx0 ^<Count^>
exit /b 1
)
endlocal
exit /b 0
3. Открываете окно командной строки (Win-R, cmd.exe, Enter). 4. Пишете в нём полный путь к сохранённому пакетному файлу (можно просто перетянуть пакетный файл в окно командной строки из Проводника). 5. Через один пробел параметром пакетного файла указываете будущее количество экземпляров запущенного приложения, то самое Ваше: Цитата Khmel_19:
![]() В данном примере путь к пакетному файлу — «C:\Мои проекты\0198\0001.cmd», количество экземпляров, указанное первым и единственным параметром пакетного файла — «5». 6. В окне консоли командной строки нажимаете Enter, запуская пакетный файл на исполнение, и видите примерно такую картину: Скрытый текст
![]() Запущено пять новых экземпляров Блокнота, в окне консоли командной строки перечислены идентификаторы их процессов (у Вас они будут, разумеется, свои). Вы можете посмотреть в Диспетчер задач или Process Explorer и убедиться, что их пять, что перечислены именно их идентификаторы, что шестой процесс Блокнота — это тот незакрытый Блокнот, в котором мы создавали и сохраняли наш пакетный файл (это видно по заголовку окна): ![]() 7. В окне консоли командной строки нажимаете для продолжения на любую клавишу и видите примерно такую картину: Скрытый текст
![]() Первые четыре Блокнота из запущенных пакетным файлом принудительно были закрыты, остался только один последний Блокнот. Тот Блокнот, в котором мы создавали и сохраняли наш пакетный файл, тоже остался открытым, т.е., никак не был затронут работой пакетного файла (как и должно быть по уму). |
|
Отправлено: 23:31, 16-09-2018 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Как скопировать определенное количество строк? | sepembra | Microsoft Office (Word, Excel, Outlook и т.д.) | 1 | 19-09-2017 13:23 | |
CMD/BAT - [решено] Запуск .bat определенное количество раз и определенное количество дней | 55kadi | Скриптовые языки администрирования Windows | 24 | 25-10-2016 07:06 | |
Прочее - как задать определенное количество хостов с одного роутера Cisco | Dimchik | Сетевые технологии | 2 | 21-05-2012 11:54 | |
Вопрос - как сразу закрыть все "дыры" при установке Win2003 server standart? | uhuh | Защита компьютерных систем | 1 | 09-04-2009 15:46 | |
CMD/BAT - Как закрыть окно bat (пакетного) файла сразу после запуска? | Fuzzy_Logic | Скриптовые языки администрирования Windows | 1 | 05-11-2006 01:48 |
|