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

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

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

答案1

你的问题很模糊,但有一个在 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

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

答案2

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

START /B program

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

program &

从控制台帮助系统:

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.

我发现的一个问题是,有多个程序写入控制台窗口,这变得有点混乱和杂乱。

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

START /B program > somefile.txt

答案3

我怀疑你的意思是:在后台运行某些程序并立即返回命令行,同时继续启动程序。

START "" program

Unix 上相当于

program &

答案4

您可以使用这个(已注释!)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

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

.\hideproc.ps1 'sc' 'stop SomeService'

我确认这在 Windows 10 上运行良好。

相关内容