@Blackster

Почему BAT скрипт работает корректно только после второго запуска?

Здравствуйте! Я написал простой скрипт, который в цикле должен запускать нужный exe файл с параметром, с паузой между каждым запуском.

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION
SET PROGRAM_PATH=D:\Program Files (x86)\Notepad++\notepad++.exe
SET LAUNCH_TIMEOUT=3
set mList=1.txt 2.txt 3.txt

(for %%m in (%mList%) do (
	echo %%m launch
	"!PROGRAM_PATH!" %%m
	echo %%m launched
	TIMEOUT /T "!LAUNCH_TIMEOUT!"
))

pause


Проблема в том, что при первом запуске этого скрипта открывается только 1й файл, и ВСЁ, скрипт ожидает непонятно чего, просто висит, не обрабатывается следующая после запуска строчка кода echo %%m launched. Если же закрыть его и запустить повторно, то открываются все 3 файла. Последующие запуски происходят тоже корректно.

Этот скрипт я ставлю в автозагрузку винды, и после перезагрузки компа он как раз и не срабатывает как положено. А при повторном запуске срабатывает. При ручном запуске всё точно также, как и при автозагрузке. Проблема не только с запуском notepad++, скрипт при запуске любой программы так себя ведет.

Подскажите, в чем моя ошибка? Спасибо!
  • Вопрос задан
  • 1121 просмотр
Решения вопроса 1
@res2001
Developer, ex-admin
Два момента:
1. Скобки являются спец.символами в cmd, поэтому их надо экранировать:
SET PROGRAM_PATH=D:\Program Files ^(x86^)\Notepad++\notepad++.exe

У меня стоит x64 версия notepad++ поэтому скобки я у себя не проверял.
2. Когда вы запускаете стороннее приложение из командного файла так как вы это делаете, то cmd ждет завершения этого приложения и только потом продолжает выполнение скрипта дальше.
Что бы убрать это ожидание запускать нужно с помощью команды start следующим образом:
start "" "!PROGRAM_PATH!" %%m
Первые кавычки - это заголовок нового окна, в данном случае не принципиально, т.к. notepad++ установит свой заголовок.

В целом ваш скрипт у меня заработал, после того как я поправил путь к notepad++ и добавил start.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Jump
@Jump
Системный администратор со стажем.
Вероятнее всего проблема в антивирусе - он может блокировать при первом запуске и пропускать при втором.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы