4

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

Каждое окно займет около 2 часов, затем начнется следующее окно и т.д.

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

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

2 ответа2

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.

источник

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. Рекомендуется соблюдать осторожность и не полагаться на результаты непроверенных процедур. (Если у вас нет предыдущих результатов, правильная процедура состоит в том, чтобы выполнить небольшую задачу, которую легко протестировать, и убедитесь, что вы тщательно тестировали вещи, прежде чем полагаться на результаты.) Я понимаю, что такие идеи могут показаться очевидными, и я понимаю, что на самом деле тестирование на практике может быть сложнее, чем теория, но я отмечаю это, потому что такие процедуры часто настолько важны, что их стоит упомянуть в любом случае.

Удачи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .