2016-08-12 3 views
0

Я пытаюсь выполнить миграцию Flyway в 11 разных баз данных одновременно. Я делаю это с помощью пакетного файла ...Как закрыть командную строку после завершения выполнения с помощью запуска

@echo off 
setlocal 
set FLYWAY_EXE=C:\flyway-3.2.1\flyway 
for /d %%f in (%~dp0props_flyway\*) do (
    start "%%~nf" %FLYWAY_EXE% migrate -configFile=%~dp0props_flyway\%%~nf\flyway.conf 
) 
set FLYWAY_EXE= 
@echo on 

Этот подход хорошо работает, но он оставляет меня с 11 командными стремительных открытыми окнами, и мне нужно вручную перейти в каждый и типа «выход». Возможно ли, чтобы эти окна командной строки автоматически закрывались после того, как миграция на пролетной основе выполнила свою работу, чтобы спасти меня, чтобы закрыть их вручную?

Я могу сделать это, не используя старт. Затем он выполняет миграцию последовательно, однако я бы предпочел сделать их параллельно, чтобы сэкономить время.

Я пробовал использовать пустую строку после запуска с this question, но это ничего не делает для меня в Windows 8.1, за исключением того, чтобы открыть командную строку с пустым заголовком вместо того, который я хочу иметь.

Я также попытался ...

cmd /c "start ^"%%~nf^" %FLYWAY_EXE% migrate -configFile=%~dp0props_flyway\%%~nf\flyway.conf" 

... безрезультатно.

Кто-нибудь знает, как я могу начать каждую из этих миграций и закрыть их после завершения?

ответ

3

Вы просто хотите выйти из окна команд? Вы должны избежать амперсандов

Просто измените вашу команду, лавируя на " && exit" до конца

TRY:

start "%%~nf" %FLYWAY_EXE% migrate -configFile=%~dp0props_flyway\%%~nf\flyway.conf ^&^& exit

+0

Superb. Большое спасибо. Работало с удовольствием :) – ManoDestra

+0

Это будет работать, если EXE не запускает запущенный процесс или службу. Закрытие Cmd окна, скорее всего, приведет к выходу из этого процесса или службы. – sambul35

+0

Да, это не проблема для моего сценария, поскольку исполняемый файл не возвращается, пока он не будет завершен. Итак, отлично работает для меня :) – ManoDestra