运行 批处理文件中的命令

Running Commands in Batch FIle

我正在尝试创建批处理文件以运行启动一些微服务和数据库

   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\bin\" & pg_ctl.exe -D "c:\Program Files\PostgreSQL\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 服务器(因为目录更改)。我认为问题在于我使用引号的方式。第 4 行开头和结尾的 'start' 有不同的用途。

此外,如果我在不同的提示中执行第 4 行,执行后如何关闭提示(相当于 nohup)

有两个错误:您不能"pass" cd启动命令。 start 有一个怪癖,可以将第一个引用的参数解释为新的 window 的标题。所以 start "C:\Program Files\PostgreSQL\bin\" ... 不起作用,您需要提供一个虚拟的 window 标题。 & 好像也错了

所以你需要:

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

由于提供了 pg_ctl.exe 的完整路径,因此不需要 cd。 但是如果要为新进程定义默认目录,就得用/D参数:

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

无关,但是:将 Postgres 数据目录放入 c:\Program Files\ 是一个非常糟糕的主意。该目录出于某种目的具有特殊权限。您应该使用 %ProgramData%%AppData% 而不是