Убить или закрыть 100 окон CMD, открываемых последовательно

4

Я делаю операцию, которая откроет 100 окон DOS в последовательности (одно за другим закончено).

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

Я хотел бы закрыть каждый сразу после его начала. Есть ли способ, которым я могу автоматизировать процесс закрытия окна DOS?

ОБНОВЛЕНИЕ: я запускаю программное обеспечение, которое открывает окно DOS для выполнения операции, после открытия окна DOS программа записывает командный файл. Это произойдет около 100 раз, потому что я настроил программное обеспечение для выполнения 100 различных операций. Я собираюсь использовать все 100 командных файлов позже. Мне нужно автоматизировать закрытие окон DOS. Мне на самом деле не нужны эти окна, я только забочусь о записи командных файлов. Надеюсь, что это проясняет проблему.

Julia_arch
источник
Если вы используете пакетное добавление команды выхода после запуска нового окна должно работать,
cybernard
Вероятно, есть хороший шанс, что все, что вы пытаетесь выполнить, может быть сделано без последовательного открытия 100 окон командной строки.
Винаяк

Ответы:

2

Если вы используете GOTO EOFв конце своих скриптов, которые выполняются, вы можете просто заменить их на EXIT /Bвместо этого, и это должно работать для ваших нужд.

Пример скрипта

@ECHO ON 
SET RootDir=C:\Folder

FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%RootDir%\*.bat"') DO START "" "%%~A"
EXIT /B

ВЫХОД

Выйдите из текущего пакетного сценария, выйдите из текущей подпрограммы или выйдите из командного процессора (CMD.EXE), дополнительно установив код уровня ошибки.

Синтаксис

EXIT [/B] [exitCode]

ключ

/B        When used in a batch script, this option will exit 
          only the script (or subroutine) but not CMD.EXE

ExitCode

          Sets the %ERRORLEVEL% to a numeric number.
          If quitting CMD.EXE, set the process exit code no.

источник

Сок Pimp IT
источник
Я только обновил свой вопрос с дальнейшими разъяснениями. Будет ли ваше решение соответствовать моим потребностям?
Julia_arch
@Julia_arch Да, когда командные файлы пишутся, их просто нужно написать, чтобы они включали EXIT /Bв конце сценария в основном. Я не уверен, как выглядит ваша логика для каждого выполняемого пакетного сценария. Похоже, у вас есть какой-то процесс, который создает пакетные сценарии, но если вы можете быть уверены, что последняя операция, которая должна быть запущена EXIT /B, должна работать. Протестируйте с небольшим или простым набором командных файлов и подтвердите.
Сок Pimp IT
@Julia_arch Я хотел бы добавить комментарий, так как здесь я делаю предположение, что этот запрос связан с superuser.com/questions/1110649/…, который я помог вам с тем, где вам пришлось использовать STARTтам, а не CMD /Cи CALLчто Прежде чем STARTобъяснить другим, почему я предложил этот EXIT /Bподход, я предложил, так как другие методы, которые я по какой-то причине предложил, не работали, как ожидалось, в вашей системе по какой-либо причине. Дайте мне знать, как все происходит, и я надеюсь, что вы найдете решение.
Сок Pimp IT
Теперь, если по какой-то причине START "" CMD /C "c:\folder\whatever.bat"пакетный файл работает, то я не предлагал пытаться поместить его CMD /Cкак часть STARTкоманды, так что это хорошее предложение, которое было обязательно сделано в другом ответе !!
Сок Pimp IT
@Julia_arch Дайте мне знать, если ответ здесь помог вам выполнить то, что вам нужно, или есть что-то еще, что вы искали с этой задачей, когда у вас есть шанс.
Сок Pimp IT
2

Существует несколько возможных подходов, включая альтернативные решения.

Будут ли открыты другие окна «командной строки», которые вас интересуют? Если нет, откройте новую командную строку и убейте все окна командной строки:

TASKKILL /fi "imagename eq cmd.exe"

В качестве альтернативы, почему создано 100 окон? Как отмечается в комментарии Винаяка, это может и не понадобиться. Попробуйте создать один пакетный файл, который использует команду CALL несколько раз. например:

@Echo Off Call File1.bat Call File2.bat Call File3.bat

Если вы пытаетесь запустить все это одновременно, а не последовательно, команда запуска может быть полезна. Рассмотреть возможность:

@Echo Off Start CMD /C File1.bat Start CMD /C File2.bat

Примечания: * Возможно, особенно при использовании команды START, лучше всего, если вы осторожны с PATH. Поэтому не просто запускайте «File1.bat», если «File1.bat» отсутствует в вашей переменной PATH или в текущем каталоге. Когда бы я ни создавал новое окно, я привык не доверять тому, что я начинаю в текущем каталоге, как мне кажется. Это может включать использование CDкоманды чаще (возможно, даже чаще, чем необходимо, просто для безопасности). Или многие команды могут быть запущены из других каталогов, если вы укажете полный путь. например:

@Echo Off Start CMD /C %USERPROFILE%\mybats\File1.bat Start CMD /C %USERPROFILE%\mybats\File2.bat

Если в именах каталогов / папок есть символ «пробел», вам может потребоваться заключить в кавычки весь путь.

@Echo Off Echo My home directory is %USERPROFILE% Pause Start "" CMD /C "%USERPROFILE%\mybats\File1.bat" Start "" CMD /C "%USERPROFILE%\mybats\File2.bat"

  • Если вам нужно использовать кавычки в вашей команде START, будьте осторожны. Команда START удивила многих людей, рассматривая первый набор кавычек как символы, которые имеют особое значение: установка заголовка окна. Вот почему приведенные выше примеры показывают набор кавычек перед путями.
  • Я пишу этот ответ на основе памяти / знаний. Я не проверял это при написании этого ответа, в первую очередь потому, что не мог придумать очень полезный тест, который бы хорошо подходил к вашей задаче, потому что я не до конца понимаю вашу задачу. Тем не менее, 100 пакетных файлов, раз два часа на кусок, это 8 дней 8 часов. Поэтому я настоятельно рекомендую потратить несколько минут на тестирование вашего подхода (с некоторыми простыми / тестовыми пакетными файлами) перед запуском вашего мероприятия продолжительностью более недели.
  • Старые версии Windows иногда имели некоторые забавные ограничения, возможно, особенно при использовании функций, разработанных для обеспечения некоторой совместимости со старым кодом MS-DOS, который был еще более наполнен забавными ограничениями. Microsoft улучшила эту ситуацию, исправив многие причуды, связанные с DOS, с течением времени. Тем не менее, я бы спросил, может ли 100 одновременных окон что-то сломать, по крайней мере, в некоторых версиях Windows. Рекомендуется соблюдать осторожность и не полагаться на результаты непроверенных процедур. (Если у вас нет предыдущих результатов, правильная процедура состоит в том, чтобы выполнить небольшую задачу, которую легко протестировать, и убедиться, что вы тщательно тестируете вещи, прежде чем полагаться на результаты.) Я понимаю, что такие идеи могут показаться очевидными, и я понимаю, что на самом деле тестирование на практике может быть сложнее, чем теория,

Удачи.

TOOGAM
источник
@PIMP_JUICE_IT На ваш ответ выше? Но мой ответ выше вашего. Ну, люди могут сортировать ответы по-разному. Поскольку на этот вопрос в настоящее время есть только два ответа, я легко выяснил, на какой другой ответ вы можете ссылаться. Я предлагаю гиперссылки. (В комментариях Stack Exchange это делается с использованием текста в квадратных скобках, URL-адреса в скобках).
TOOGAM