Windows批处理脚本会让控制台窗口保持打开状态

3
我正在尝试为朋友的Windows 7计算机设置Nginx和PHP5。我在网上找到了一个启动和停止Nginx和PHP的脚本,在添加目录更改行后,我能够使其正常工作。但是,似乎存在一个问题导致它保留启动PHP的第二个控制台窗口。有没有办法关闭那个控制台窗口?
批处理脚本:
@ECHO OFF

CD C:\nginx

tasklist /FI "IMAGENAME eq nginx.exe" | find /I "nginx.exe" > NUL && (
    GOTO STOP
) || (
    GOTO START
)

:START
ECHO Starting nginx
start nginx
ECHO Starting PHP
start php\php-cgi.exe -b 127.0.0.1:9000 -c c:\nginx\php\php.ini
GOTO DONE

:STOP
ECHO Stopping nginx
start nginx -s quit
ECHO Stopping PHP
taskkill /f /IM php-cgi.exe

:DONE
TIMEOUT 3

timeout 行之后放置一个 exit 命令。这是您需要做的吗? - foxidrive
@foxidrive 是的,它保持打开状态。 - PhearOfRayne
@foxidrive 光标只是跳到下一行,闪烁着好像在等待... - PhearOfRayne
尝试在批处理文件中使用以下命令:cmd /c php\php-cgi.exe -b 127.0.0.1:9000 -c c:\nginx\php\php.ini。提示符返回的结果与您描述的一致。编辑请参考malexander的答案,他找到了更多信息。 - foxidrive
@foxidrive 同样的事情。刚刚看到了一个更新的答案,PHP CGI的编程方式是保持开放并监听连接。感谢您的帮助! - PhearOfRayne
显示剩余3条评论
3个回答

5
你可以在START上使用/b参数来启动应用程序而不打开另一个cmd窗口。
START /b php\php-cgi.exe -b 127.0.0.1:9000 -c c:\nginx\php\php.ini
更新:
看起来这是php-cgi.exe的行为。请查看这篇文章以了解完整的故事和解决方法。http://wiki.nginx.org/PHPFastCGIOnWindows

启动后,php-cgi.exe将在命令提示符窗口中继续监听连接。要隐藏该窗口,请使用小型实用程序RunHiddenConsole

基本上,您只需要下载并解压缩RunHiddenConsole到nginx目录,然后将此行更改为:

RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9000 -c c:\nginx\php\php.ini

窗口仍然打开。 - PhearOfRayne
看起来这是php-cgi.exe的行为。请参阅此文章以获取完整的故事和解决方法。http://wiki.nginx.org/PHPFastCGIOnWindows - malexander
/B 参数可以隐藏 PHP-CGI 命令行窗口(在 Windows 10 和 PHP 7.2.5 中使用)。 - Optimae

1
你正在寻找
start php\php-cgi.exe -b 127.0.0.1:9000 -c c:\nginx\php\php.ini 
/exit b

开始 php\php-cgi.exe -b 127.0.0.1:9000 -c c:\nginx\php\php.ini && 退出 - Dmitri DB
那只是立即退出脚本,而 PHP CGI 窗口保持打开状态。 - PhearOfRayne

0

要运行一个不可见的 .BAT 文件,您可以使用一个简单的 vbs 脚本。

将以下内容放入 .VBS 文件中:

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False

然后像这样运行你的BAT文件:

wscript.exe "C:\invisible.vbs" "C:\YourBat.bat"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接