如何在后台执行 Windows 命令行?

Moh*_*deh 223 windows command-line

如何在后台执行 Windows 命令行,而不与活动用户交互?

小智 323

这有点晚了,但我在自己寻找答案时遇到了这个问题,我发现了这个:

START /B program
Run Code Online (Sandbox Code Playgroud)

在 Windows 上,它最接近 Linux 命令:

program &
Run Code Online (Sandbox Code Playgroud)

从控制台帮助系统:

C:\>HELP START

Starts a separate window to run a specified program or command.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     Title to display in window title bar.
    path        Starting directory.
    B           Start application without creating a new window. The
                application has ^C handling ignored. Unless the application
                enables ^C processing, ^Break is the only way to interrupt
                the application.
Run Code Online (Sandbox Code Playgroud)

我看到的一个问题是,您有多个程序写入控制台窗口,这有点令人困惑和混乱。

为了使其不与用户交互,您可以将输出重定向到一个文件:

START /B program > somefile.txt
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,如果我退出生成该进程的 shell 窗口,该进程似乎也会终止。 (13认同)
  • 我最喜欢这个答案,因为它不会打开另一个命令窗口 (5认同)
  • 这似乎对我不起作用,它似乎只创建了一个新的 cmd 实例 [?] 但是,如果我像 `start /B "" program` 那样运行它,那么它就起作用了...... (4认同)
  • @rogerdpack 没错。出于某种原因,对于 Windows 7,这是命令格式。"" 是强制性的标题参数。 (3认同)
  • @Qwerty:查看 SetConsoleCtrlHandler 的 MSDN (2认同)

小智 84

我怀疑你的意思是:在后台运行一些东西并在启动的程序继续的情况下立即返回命令行。

START "" program
Run Code Online (Sandbox Code Playgroud)

哪个是 Unix 等价物

program &
Run Code Online (Sandbox Code Playgroud)

  • fg 等价物是什么?我们可以关闭命令提示符而 porgram 仍会运行吗? (9认同)
  • `start` 的空参数是什么?没有它它不能工作(只执行一个新的命令实例),但是 `start` 的帮助没有说明它,它声明所有参数都是可选的(或者我不明白)。 (5认同)

nhi*_*kle 48

您的问题非常含糊,但ServerFault 上有一篇帖子可能包含您需要的信息。那里的答案描述了如何运行隐藏的批处理文件窗口:

您可以改为使用 Windows 脚本文件静默运行它。Run 方法允许您在不可见模式下运行脚本。创建一个.vbs 这样的文件

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing
Run Code Online (Sandbox Code Playgroud)

并安排它。本示例中的第二个参数设置窗口样式。0 表示“隐藏窗口”。

  • 如果你习惯了linux,这一点确实不含糊。只需在末尾加上 &amp; 即可将其设置为背景。 (4认同)

小智 19

START /MIN program 
Run Code Online (Sandbox Code Playgroud)

上面的更接近于它的 Unix 对应物 program &


Ben*_*n N 9

您可以使用这个(评论!)PowerShell 脚本:

# Create the .NET objects
$psi = New-Object System.Diagnostics.ProcessStartInfo
$newproc = New-Object System.Diagnostics.Process
# Basic stuff, process name and arguments
$psi.FileName = $args[0]
$psi.Arguments = $args[1]
# Hide any window it might try to create
$psi.CreateNoWindow = $true
$psi.WindowStyle = 'Hidden'
# Set up and start the process
$newproc.StartInfo = $psi
$newproc.Start()
# Return the process object to the caller
$newproc
Run Code Online (Sandbox Code Playgroud)

将其另存为.ps1文件。启用脚本执行后(请参阅PowerShell 标记 wiki启用脚本),您可以向它传递一个或两个字符串:可执行文件的名称和可选的参数行。例如:

.\hideproc.ps1 'sc' 'stop SomeService'
Run Code Online (Sandbox Code Playgroud)

我确认这适用于 Windows 10。

  • 是的 start /b 不再有效。 (4认同)

小智 6

这就是我的 PHP 内部服务器进入后台的方式。所以从技术上来说它应该对所有人都有效。

start /B "" php -S 0.0.0.0:8000 &
Run Code Online (Sandbox Code Playgroud)

谢谢