題 如何在後台執行Windows命令行?


如何在後台執行Windows命令行,而不與活動用戶交互?


131
2017-10-12 06:09


起源


你能說明你想做什麼嗎?是否要在後台在命令行上執行命令,或者是否要在後台執行整個命令行,因此從桌面看不可見? - omnibrain
我需要兩個手杖在後台命令行上執行命令,或者你想在後台執行整個命令行 - Mohammad AL-Rawabdeh
重複 關於ServerFault的這個問題。 - Dan Dascalescu


答案:


你的問題很模糊,但有一個問題 發佈在ServerFault上 其中可能包含您需要的信息。那裡的答案描述瞭如何運行隱藏的批處理文件窗口:

您可以使用Windows腳本文件以靜默方式運行它。運行   方法允許您以不可見模式運行腳本。創建一個 .vbs   像這樣的文件

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

並安排它。此示例中的第二個參數設置窗口   樣式。 0表示“隱藏窗口”。


26
2017-10-12 06:30



太棒了。對於Logitech,SetPoint永遠不會從Windows開始。我已經手動啟動了大約3年了。批次的位置是否重要?我見過有人把這種類型的批處理文件放在C或root中。 - ejbytes


這有點晚了,但我在搜索答案時遇到了這個問題,我發現了這個:

START /B program

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

program &

從控制台HELP系統:

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

192
2018-05-03 14:28



我最喜歡這個答案,因為它沒有打開另一個命令窗口 - wisbucky
這對我來說似乎不起作用,它似乎只創建一個新的cmd實例[?]但是如果我像它一樣運行它 start /B "" program 然後它起作用了...... - rogerdpack
@rogerdpack那是對的。出於某種原因,在Windows 7中,這是命令格式。 “”是必需的標題參數。 - ejbytes
不幸的是,如果我退出我生成進程的shell窗口,看起來該進程也會終止。 - palswim
@Qwerty:查看SetConsoleCtrlHandler的MSDN - Zan Lynx


我懷疑你的意思是:在後台運行一些東西,並在啟動的程序繼續的情況下立即返回命令行。

START "" program

哪個是Unix的等價物

program &

59
2017-09-30 11:44



什麼是fg等價物?我們可以關閉命令提示符並且仍然會運行porgram嗎? - Nenotlep
另外,我想在命令提示符下運行一個程序並不時返回它,就像屏幕一樣 - 這是可行的嗎?我需要能夠關閉命令提示符,但保持正在運行的程序可用。 - Nenotlep
什麼是空參數 start?沒有它它不起作用(只執行一個新的命令實例),但是 start它的幫助沒有說什麼,它說明所有參數都是可選的(或者我不理解)。 - Dawid Ferenczy
@DawidFerenczy start 我沒有空參數的工作,但是當我使用空參數時,我似乎得到一個單獨配置的shell,因為當我沒有使用空參數時我沒有使用空的參數參數。我想知道為什麼他們使用單獨的配置 - HelloGoodbye
@保羅 START "" program 在我的新終端中啟動命令,同時 program & 在Unix中運行命令並將輸出打印到同一終端。 - HelloGoodbye


START /MIN program 

上面的內容與它的Unix版本非常接近 program &


10
2017-09-13 06:55





你可以使用這個(註釋!)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標記維基),您可以傳遞一個或兩個字符串:可執行文件的名稱和可選的參數行。例如:

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

我確認這適用於Windows 10。


5
2017-09-01 22:20



是開始/ b不再有效。 - Sajuuk


如果您希望命令行程序在用戶不知道的情況下運行,請將其定義為Windows服務,它將按計劃運行。


1
2017-09-30 14:00



你是怎樣做的? - barlop
或者,您可以將其設置為計劃任務 - 控制面板 - >管理工具 - >計劃任務或使用 schtasks Windows XP及更高版本中的命令(警告: schtasks 很複雜)。 - LawrenceC


這就是我的PHP內部服務器進入後台的方式。從技術上講,它應該適用於所有人。

start /B "" php -S 0.0.0.0:8000 &

謝謝


1
2017-07-09 04:30