Последние несколько дней я работал над сценарием, который, как я думал, будет довольно простым, но, похоже, нет, и я понимаю, почему. Моя проблема в том, как обойти это.Как я могу убить все cmd.exe, кроме того, что в данный момент выполняется из пакета?
Пакетный сценарий мне нужно объяснил:
У меня есть сценарий, который работает в cmd.exe, который делает кучу вещей, как перемещение огромного количества файлов из места в другое. Назовите его movefile.cmd
. Этот скрипт работает, но иногда он останавливается (очень редко - позволяет не вникать в почему и этот скрипт). Важно, чтобы этот скрипт всегда работал, поэтому моя идея заключалась в создании пакета, который выходит из cmd.exe, а затем снова открывает скрипт каждый час или около того. Назовём этот скрипт restartcmd.bat
прекрасно звучит просто, как я мог бы сделать это:
@echo off
:loop
start c:\script\movefile.cmd
Timeout /nobreak /t 3600
Taskkill cmd.exe
goto loop
Но очевидно, что это не работает, потому что мой новый сценарий также работает в cmd.exe, так что бы убить этого процесс также.
Что я пробовал:
Так что я сделал копию cmd.exe и переименовал его в dontkillthis.exe. Я запускаю dontkillthis.exe, а затем откройте restardcmd.bat от dontkillthis.exe - это работает отлично! Но я должен уметь просто dobbleclick мой скрипт вместо этого. Зачем? Поскольку он должен быть как можно более простым, и я хочу, чтобы мой restartcmd.bat находился в моей папке автозагрузки.
Я искал идеи получения точного идентификатора процесса cmd.exe и закрыл его, чтобы мой dontkillthis.exe остался, но я не могу прибить его. Пробовал все, что написано здесь how to kill all batch files except the one currently running, но я не могу заставить его работать.
Я не уверен, если я запутался или на самом деле это немного сложно сделать.
Я бы очень признателен за помощь здесь.
С наилучшими пожеланиями
MO
Грязный путь: создайте копию 'cmd' как' kill-me.exe', используйте 'start kill-me c: \ script \ movefile.cmd' & then 'taskkill kill-me.exe' (Это быстрый взлом. Должны быть лучшие способы.) – anishsane
[Получить идентификатор текущего cmd.exe] (https://social.msdn.microsoft.com/Forums/vstudio/en-US/270f0842-963d-4ed9-b27d-27957628004c/what -is-the-pid-of-the-current-cmdexe), тогда 'taskkill' имеет возможность фильтровать на основе' PID! = xxx' Check 'taskkill /?'. – anishsane