web-dev-qa-db-ja.com

Windows XP以降Windows:ウィンドウが表示されていない状態でバックグラウンドでバッチファイルを実行するにはどうすればよいですか?

同様の質問( Windowsの起動時にバックグラウンドでバッチファイルを実行する )に既に回答していることは知っていますが、今回はバッチを起動する必要があります。

  • 別のバッチから、
  • コンソールウィンドウを表示せずに、
  • すべての引数を非表示バッチに渡します。

最初のバッチはコンソールウィンドウで実行されます。ただし、2番目のバッチ(非同期方式で最初のバッチによって起動される)にもコンソールウィンドウを表示させたくありません。

私はまさにそれを行うVBScriptスクリプトを考え出しました。スクリプトを 他の人が参照するための回答 として配置しましたが、他のアイデア/ソリューションがあれば、気軽に貢献してください。

注:Windowsコマンドプロセッサのコンソールウィンドウは、多くの人によって実際には正しくないDOSウィンドウと呼ばれています。


答えてくれてありがとう。私が理解していることから、不可視モードで実行するためにスクリプトを非同期的に呼び出す必要がある場合:

  • すでにコンソールウィンドウにある2番目のスクリプトからは、start /bで十分です。
  • Windowsから、2番目のウィンドウをトリガーせずに、私のソリューションはまだ有効です。
117
VonC

非同期で実行するために2番目のバッチファイルが必要ですか?通常、1つのバッチファイルはcallコマンドと同期して別のバッチファイルを実行し、2番目のバッチファイルは最初のバッチファイルを共有します。

canstart /bsecond.batを使用して、2番目のバッチファイルを起動しますa最初のウィンドウを同期する最初のウィンドウから同期的に。両方のバッチファイルが同時にコンソールに書き込む場合、出力は重複し、おそらく判読できません。また、2番目のバッチファイルの最後にexitコマンドを配置するか、すべてが完了したら2番目のcmdシェル内に配置します。

53
P Daddy

考えられる解決策は次のとおりです。

最初のスクリプトから、次の行を使用して2番目のスクリプトを呼び出します。

wscript.exe invis.vbs run.bat %*

実際、次のようにvbsスクリプトを呼び出しています。

  • [パス] \スクリプトの名前
  • スクリプトに必要な他のすべての引数(%*

次に、invis.vbsは Windows Script Host Run()メソッド でスクリプトを呼び出します。

  • intWindowStyle:0は「非表示ウィンドウ」を意味します
  • bWaitOnReturn:falseは、最初のスクリプトが2番目のスクリプトの終了を待つ必要がないことを意味します

Invis.vbsは次のとおりです。

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
109
VonC

バッチファイルをexeに変換します。 Bat To Exe Converter または Online Bat To Exe Converter を試して、ゴーストアプリケーションとして実行するオプションを選択します(ウィンドウなし)。

12
Rob Kam

これはDOSウィンドウを開かずにバッチファイルを実行する最も簡単で最短のソリューションだと思います、定期的に実行するコマンドセットをスケジュールしたい場合は非常に気が散ることがありますので、DOSウィンドウがポップアップし続けます、ここにあなたのソリューションがあります。 VBSスクリプトを使用してバッチファイルを呼び出す...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

上記の行をエディターにコピーし、ファイルを.VBS拡張子で保存します。それに応じて、.BATファイル名とパスを編集します。

9
indago

これを達成するための方法のコレクションがあります-さらに可能であれば、開始されたプロセスのPIDも返そうとしました(リンクされたすべてのスクリプトは、便利な名前でダウンロードして保存できます):

1)IEXPRESSソリューションは、古い95/98マシンでも使用できます。 Iexpressは、Windowsにまだパッケージ化されている非常に古いツールです。引数はコマンドとその引数のみを受け入れるためです。

使用例:

call IEXPhidden.bat "cmd /c myBat.bat"  "argument"

2)SCHTASKS-コマンドと引数の2つの引数のみを再び受け入れます。許可を取得し、可能であればWEVTUTIL(Vista以降で利用可能なため、新しいバージョンのWindowsがPIDを受け取る)コマンドでプロセスのPIDを取得します。

使用例:

call SCHPhidden.bat "cmd /c myBat.bat"  "argument"

3)'WScript.Shell'-スクリプトは「WScript.Shell」の完全なラッパーであり、可能なオプションはすべてコマンドラインオプションを使用して設定します。これはjscript /バッチハイブリッドであり、バットとして呼び出すことができます。

使用例(詳細については、「-h」を使用してヘルプを印刷してください):

call ShellRunJS.bat "notepad.exe" -style 0 -wait no 

4)'Win32_ProcessStartup'-再び完全なラッパーとすべてのオプションはコマンドライン引数からアクセスできます。今回はWSF /一部のJscriptと一部のVBScriptコードを含むバッチハイブリッド-ただし、開始されたプロセスのPIDを返します。プロセスが非表示になっていない場合、X/Y座標などのオプションを使用できます(すべての実行可能ファイルには適用されません-ただし、cmd.exeなど)座標を受け入れます)。

使用例(詳細については、「-h」を使用してヘルプを印刷してください):

call win32process.bat "notepad" -arguments "/A openFile.txt"  -showWindows 0 -title "notepad"

5)。NETソリューション。 ProcessStartInfoオプションのほとんどのオプションが使用されます(ただし、最後にはすべてを含めるには疲れすぎました)。

使用例(詳細については、「-h」を使用してヘルプを印刷してください):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal
7
npocmaka

「runas」を使用するか、Windowsのスケジュールされたタスクの別のユーザーでスケジュールして、別のユーザー名で実行します。

2
JosephStyons

他の質問で autoexnt を提案しました。この状況でも可能です。サービスを手動で実行するように設定するだけです(つまり、起動時に自動ではありません)。バッチを実行する場合は、autoexnt.batファイルを変更して目的のバッチファイルを呼び出し、autoexntサービスを開始します。

これを開始するバッチファイルは、次のようになります(テストされていません)。

echo call c:\path\to\batch.cmd %* > c:\windows\system32\autoexnt.bat
net start autoexnt

この方法で開始されたバッチファイルはシステムユーザーとして実行されるため、ネットワーク共有に自動的にアクセスすることはできません。ただし、Net Useを使用してリモートサーバーに接続できます。

Windows 2003リソースキットをダウンロード を取得する必要があります。リソースキットは、Windows XPなどの他のバージョンのウィンドウにもインストールできます。

2
wimh

また使用できます

start /MIN notepad.exe

PS:残念ながら、最小化されたウィンドウステータスは実行するコマンドに依存します。 V.G.効かない

start /MIN calc.exe
0
user2928048

.vbsファイルを介して.batファイルを実行できます
次のコードを.vbsファイルにコピーします。

Dim WshShell
Dim obj
Set WshShell = WScript.CreateObject("WScript.Shell") 
obj = WshShell.Run("C:\Users\file1.bat", 0) 
obj = WshShell.Run("C:\Users\file2.bat", 0)  and so on
set WshShell = Nothing 
0