Запуск команд в пакетном файле - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь создать командный файл для запуска некоторых микросервисов и базы данных

   1 FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :1000') DO @ECHO TaskKill.exe /PID %%P
   2 FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :1001') DO @ECHO TaskKill.exe /PID %%P
   3 FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :5432') DO @ECHO TaskKill.exe /PID %%P
   4 start cd "C:\Program Files\PostgreSQL\10\bin\" & pg_ctl.exe -D "c:\Program Files\PostgreSQL\10\data" start 
    @REM to start service
   5 start javaw -jar -Dserver.port=1000 text-annotation-tool-1.0-SNAPSHOT.jar

Строки с 1 по 3 и Строка 5 выполняются правильно при выполнении с комментариями в строке 4.

Строка 4 - запуск сервера Postgres в новом приглашении (из-за изменения Dir).Я думаю, что проблема в том, как я использовал цитаты.«Начало» в начале и конце строки 4 служит разным целям.

Кроме того, если я выполняю строку 4 в другом приглашении, как закрыть приглашение после выполнения (эквивалент nohup)

1 Ответ

0 голосов
/ 26 июня 2018

Есть две ошибки: Вы не можете "передать" cd команде запуска.И у start есть особенность, чтобы интерпретировать первый цитируемый параметр как заголовок нового окна.Так что start "C:\Program Files\PostgreSQL\10\bin\" ... не сработает, вам нужно указать фиктивный заголовок окна.& также кажется неправильным

Так что вам нужно:

start "Postgres Server" "C:\Program Files\PostgreSQL\10\bin\pg_ctl.exe" -D "c:\Program Files\PostgreSQL\10\data" start

Поскольку указан полный путь к pg_ctl.exe, в cd нет необходимости.Но если вы хотите определить каталог по умолчанию для нового процесса, вы должны использовать параметр /D:

start "Postgres Server" /D "C:\Program Files\PostgreSQL\10\bin" pg_ctl.exe -D "c:\Program Files\PostgreSQL\10\data" start

Несвязанный, но: поместить каталог данных Postgres в c:\Program Files\очень плохая идеяЭтот каталог имеет специальные разрешения для определенной цели.Вы должны использовать %ProgramData% или %AppData% вместо

...