web-dev-qa-db-ja.com

Windowsのコマンドラインをバックグラウンドで実行する方法を教えてください。

アクティブユーザーと対話せずに、Windowsコマンドラインをバックグラウンドで実行する方法を教えてください。

147

あなたの質問はかなりあいまいですが、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

そしてそれをスケジュールしなさい。この例の2番目の引数はウィンドウスタイルを設定します。 0は「ウィンドウを隠す」という意味です。

32
nhinkle

これは少し遅れていますが、私は自分自身で答えを探している間にこの質問に出会いました、そして私はこれを見つけました:

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
222
Novicaine

疑いの余地があります。バックグラウンドで何かを実行し、起動したプログラムを続行してコマンドラインをすぐに元に戻すことです。

START "" program

これは、Unixに相当するものです。

program &
67
Paul Douglas
START /MIN program 

上記のものは、Unix版のprogram &とかなり似ています。

12
Siva Sankaran

あなたはこれを使うことができます(コメント付き!)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 でスクリプトを有効にするを参照)、1つまたは2つの文字列を渡すことができます。実行可能ファイルの名前とオプションの引数行です。例えば:

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

私はこれがWindows 10で動作することを確認します。

5
Ben N

これが私のPHP内部サーバーがバックグラウンドになる方法です。だから技術的にそれはすべての人のために働くはずです。

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

ありがとう

2
Suyash Jain

ユーザーが知らなくてもコマンドラインプログラムを実行したい場合は、Windowsサービスとして定義するとスケジュールに従って実行されます。

1
CarlF

2つの例があります。

  1. 以下はcalc.exeを開きます。

sTART/Bを呼び出します。 "my calc" "calc.exe"

  1. 前景が望ましくない場合があるので、次のように最小化して実行します。

sTART/MIN "my mongod" "%ProgramFiles%\ MongoDB\Server\3.4\bin\mongod.exe"を呼び出します。