Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск и ожидание закрытия, уже запущенного процесса

Ответить
Настройки темы
CMD/BAT - [решено] Поиск и ожидание закрытия, уже запущенного процесса

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем привет,
Помогите написать батник или может как то по другому. в Общем.

Нужно, чтоб, при запуске батника, он нашел уже запущенный процесс *****.exe и ждал его завершения, в течении дня, как пользователь попользуется. не важно, главное чтоб ждал, после как процесс завершится, должна выполнится команда

удаление папки, там, куда будет помещен батник
Код: Выделить весь код
@for /f "tokens=1 delims=" %%D in ('dir /ad /b /s "Какая то папка или файл"') do rd /q /s "%%D"
у меня есть один код,

нашел на просторах инета,

Код: Выделить весь код
set process=какаято-прога.exe
:check
tasklist /FI "IMAGENAME eq %process%" /NH | findstr /i "%process%">nul
if %errorLevel% == 0 goto :check
@for /f "tokens=1 delims=" %%D in ('dir /ad /b /s "Data"') do rd /q /s "%%D"
pause
но он грузит Проц 5-10% что не допустимо, комп должен быть не нагружен вообще. Как такое реализовать.

Отправлено: 09:11, 22-08-2020

 

Старожил


Сообщения: 232
Благодарности: 21

Профиль | Отправить PM | Цитировать


Цитата Logonius:
можно батник в exe конвертировать? »
Logonius, можно сразу и скрипт PS компилировать в исполняемый файл, но нужны точные значения переменных $app и $del
Выложите здесь код с Вашими переменными

Отправлено: 16:44, 22-08-2020 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 232
Благодарности: 21

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip run_proc.zip
(201.8 Kb, 2 просмотров)

Logonius, пробуйте исп. файл. Рядом нужно положить test.ps1

Отправлено: 17:01, 22-08-2020 | #12


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Uragan66,

Код: Выделить весь код
param(
    $app = 'Spotify',
    $del = 'Data'
)cls

if(ps $app){
    while(ps $app){sleep 1}
    ri "$PSScriptRoot\$del" -rec 
}
else{"$app not launched yet."}
Цитата Uragan66:
run_proc.zip
(201.8 Kb, 0 просмотров) »
архив поврежден, пишет ошибка контрольной суммы

Отправлено: 17:03, 22-08-2020 | #13


Старожил


Сообщения: 232
Благодарности: 21

Профиль | Отправить PM | Цитировать


Цитата Logonius:
архив поврежден, пишет ошибка контрольной суммы »
странно... попробовал скачать - нормально архив открывается. Перекачайте другим браузером...

Вот ещё скомпилированный скрипт PS, без батника.

Последний раз редактировалось Uragan66, 29-08-2020 в 20:05.


Отправлено: 17:24, 22-08-2020 | #14


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Uragan66:
Вот ещё скомпилированный скрипт PS, без батника. »
работает, че та делает вроде)), при закрытии проги, потом он следом исчезает и все, а папку не удалил за собой. ЭХ)), 3 дня мучаюсь, вроде задача простая, а так сложно реализовать.

Отправлено: 17:41, 22-08-2020 | #15


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
NameExe = "notepad.exe"             'Здесь прописать имя процесса
NameDel = "Какая то папка или файл" 'Здесь прописать имя папки или файла
WaitMsec = 5000                     'Здесь прописать периодичность опроса наличия процесса милисек.

Do
    WScript.Sleep WaitMsec
    Set WMI = GetObject("winMgmts:").ExecQuery("SELECT * From Win32_Process WHERE Name='" + NameExe + "'")
    If WMI.Count = 0 Then
        FScript = WScript.ScriptFullName
        With CreateObject("Scripting.FileSystemObject")
            PNameDel = .GetParentFolderName(FScript) + "\" + NameDel
            If .FolderExists(PNameDel) Then .DeleteFolder PNameDel, True
            If .FileExists(PNameDel) Then .DeleteFile PNameDel, True
        End With
        Exit Do
    End If
Loop
Сохранить в кодировке 1251 в .vbs файл, например, kuku.vbs
Запускать как wscript.exe kuku.vbs
Чтобы не грузился зря процессор, периодичность опроса делайте разумной, не слишком маленькой

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:45, 22-08-2020 | #16


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, От души, дружище, работает как надо, благодарю []~( ̄▽ ̄)~*

Отправлено: 17:51, 22-08-2020 | #17


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Logonius, По видимому, моё решение прямолинейно: Вы сформулировали, как Вы хотите решить задачу, я тупо написал решение. Но, вчитываясь в Ваши посты:
Цитата Logonius:
батник будет запускаться после основного файла следом.
........................
работает, а можно батник в exe конвертировать?, будет работать, просто мне надо чтоб он тихо в фоне включался, а так CMD окно вылазит. »
, делаю вывод, что ваша основная программа запускается неким командным файлом. И, чтобы убить папку после её отработки, вовсе не надо дополнительно анализировать, есть она в процессах, или нет. Надо просто дождаться окончания программы стандартным образом, то есть, в CMD запустить ее через Start /Wait (сохранить в 866 кодировке)
Код: Выделить весь код
@Echo Off
	Set "NameExe=C:\Windows\System32\notepad.exe" 'Здесь прописать путь к программе
	Set "NameDel=Какая то папка или файл"         'Здесь прописать имя папки или файла

	Start /Wait " " "%NameExe%"
	2>nul Rd /S /Q "%NameDel%" 
	2>nul Del "%NameDel%" 
Exit /B
А чтобы не напрягало CMD-окно, вот VBS вариант (сохранить в 1251 кодировке)
Код: Выделить весь код
NameExe = "C:\Windows\System32\notepad.exe" 'Здесь прописать путь к программе
NameDel = "Какая то папка или файл"         'Здесь прописать имя папки или файла

Ret = CreateObject("WScript.Shell").Run(NameExe, 1, True)
        
With CreateObject("Scripting.FileSystemObject")
    PNameDel = .GetParentFolderName(WScript.ScriptFullName) + "\" + NameDel
    If .FolderExists(PNameDel) Then .DeleteFolder PNameDel, True
    If .FileExists(PNameDel) Then .DeleteFile PNameDel, True
End With

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-08-2020 в 12:23.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:50, 23-08-2020 | #18


Пользователь


Сообщения: 63
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
А чтобы не напрягало CMD-окно, вот VBS вариант (сохранить в 1251 кодировке) »
вот вроде всё делаю правильно, сохранил скрипт в кодировке ANSI, но ничего не происходит. Блокнот запускается, я жду несколько сек, закрываю блокнот, но файл не удаляется. В чём моя ошибка?
Код: Выделить весь код
NameExe = "C:\Windows\System32\notepad.exe" 'Здесь прописать путь к программе
NameDel = "C:\1\scripts\2.txt"         'Здесь прописать имя папки или файла

Ret = CreateObject("WScript.Shell").Run(NameExe, 1, True)
        
With CreateObject("Scripting.FileSystemObject")
    PNameDel = .GetParentFolderName(WScript.ScriptFullName) + "\" + NameDel
    If .FolderExists(PNameDel) Then .DeleteFolder PNameDel, True
    If .FileExists(PNameDel) Then .DeleteFile PNameDel, True
End With
И сразу второй вопрос, что изменить если я хочу не удалить какой-то файл, а запустить после программы какой-нибудь батник?

Отправлено: 06:42, 25-08-2020 | #19


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Цитата Logonius:
удаление папки, там, куда будет помещен батник »
Вы указали полный путь к файлу, скрипт к нему добавил путь к себе, а в результате файл не нашелся. Уберите в коде путь к скрипту, если хотите указывать полный путь к файлу
Код: Выделить весь код
PNameDel = .GetParentFolderName(WScript.ScriptFullName) + "\" + NameDel
Не тестировал.
Вот вариант, Если путь указан, берётся указанный, если нет - берётся путь к скрипту
Код: Выделить весь код
NameExe = "C:\Windows\System32\notepad.exe"                             'Здесь прописать путь к программе
NameDel = "Z:\Box_In\Длинное имя\Тест1\Тест2\Какая то папка или файл"   'Здесь прописать имя папки или файла

Ret = CreateObject("WScript.Shell").Run(NameExe, 1, True)
        
PNameDel = NameDel
With CreateObject("Scripting.FileSystemObject")
    If InStr(NameDel, "\") <= 0 Then PNameDel = .GetParentFolderName(WScript.ScriptFullName) + "\" + NameDel
    If .FolderExists(PNameDel) Then .DeleteFolder PNameDel, True
    If .FileExists(PNameDel) Then .DeleteFile PNameDel, True
End With

Цитата NLOLegion:
что изменить если я хочу не удалить какой-то файл, а запустить после программы какой-нибудь батник? »
Код: Выделить весь код
NameExe = "C:\Windows\System32\notepad.exe"     'Здесь прописать путь к программе
NameBat = "D:\CMD_Forum\Soft_In\мой батник.bat" 'Здесь прописать путь к батнику

With CreateObject("WScript.Shell")
    Ret = .Run(NameExe, 1, True)
    Ret = .Run("cmd /c """ + NameBat + """", 1, False)
End With

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 25-08-2020 в 10:11.


Отправлено: 07:09, 25-08-2020 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск и ожидание закрытия, уже запущенного процесса

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - [решено] запуск программы с параметрами и ожидание ее закрытия muslimdogger Программирование и базы данных 3 24-08-2015 23:20
Проверка запущенного процесса Anarasius AutoIt 2 25-06-2014 11:39
.NET - Ожидание завершения процесса Efsey Программирование и базы данных 11 24-11-2010 19:16
Java - Отслеживание состояния запущенного процесса EvgeniyQQQ Программирование и базы данных 15 02-10-2007 13:20
А можно для уже запущенного процесса сменить user-a ? ukms Программирование и базы данных 6 23-10-2002 13:51




 
Переход