web-dev-qa-db-ja.com

実行時にコマンドプロンプトが表示されないWindowsバッチファイルを作成する方法を教えてください。

コマンドラインから起動するRedcarというRuby gemをインストールしました。実行されると、シェルが終了するまでそれを盗みます。そのため、コマンドライン作業を続けるには新しいシェルウィンドウを作成する必要があります。私が使っているシェルは、MySysGitのGITBashシェルです。

ショートカットとしてRedcarを起動することを意図したRedcar.batファイルを見つけました、と私は思いますが、BATファイルを起動するたびに特別なコマンドプロンプトウィンドウを開くことはしたくないと思います。

プロンプトが表示されずにBATを実行する方法を教えてください。

55
Jake

できません - 組み込みのコマンドプロンプトでバッチファイルを実行しても、バッチファイルが終了するまでウィンドウは開いたままになります。

あなたができることができることは、バッチファイルができるだけ速く終了することを確認するためのステップを踏むことです。可能であれば、startコマンドを使用して任意のプログラムを実行するようにバッチファイルを変更します。デフォルトでは、startはプログラムが終了するのを待たずにすぐに戻るので、バッチファイルは実行を続け、おそらくは直ちに終了します。ショートカットを変更してバッチファイルを最小化して実行すると、ウィンドウが画面に表示されずにタスクバーが点滅するだけになります。

これに対する1つの注意点は、多くのスクリプトインタプリタであるコンソールモードプログラムを実行している場合、バッチファイルはプログラムが終了するのを待ち、startを使用すると新しいコンソールウィンドウが生成されることです。この場合に必要なことは、コンソールベースのインタープリタではなく、Windowsベースのバージョンのインタープリタを実行することです - startは不要です。 Perlの場合は、wperl.exeの代わりにPerl.exeを実行します。 Pythonでは、pythonw.exeの代わりにpython.exeです。私がダウンロードした古いwin32 Rubyディストリビューションはrubyw.exeを持っています、それは同じことをするべきです。

最後の可能性は、隠されたウィンドウでコマンドプロンプトを実行するためにサードパーティ製のツールを使うことです。私はそのようなことを聞​​いたことがありますが、それらを使用したことは一度もありませんでした。

37
afrazier

私はこれがDOSウィンドウを開かずにバッチファイルを実行するための最も簡単で最短の解決策だと思います、定期的に実行するコマンドのセットをスケジュールしたい時には非常に邪魔になるでしょう。 。 VBスクリプトを使用してバッチファイルを呼び出す...

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

上記の行をエディタにコピーして、ファイルに拡張子.VBSを付けて保存します。それに応じて.BATファイル名とパスを編集します。それからちょうど.vbsファイルを実行すると魔法が起こります!

20
indago

あなたはコマンドプロンプト内からSTART/MIN CMD.EXE/C mybatchfile.batで別のバッチファイルを実行することができます。

外部からcmdコンソールウィンドウを表示しますが、それを回避するために、でショートカットファイルを作成することができますproperties最小化開始に変更しました。

8
vhanla

これを行うには、プログラム Bat To Exe Converter を使用して、バッチファイルを実行可能ファイルに変換します。

実行可能ファイルに変換するときは、可視性のセクションにInvisibleアプリケーションとしてファイルを実行するオプションがあります。したがって、実行するとウィンドウなしで実行されます。

Bat to exe

Dennis Williamsonの答えを続けて、あなたはバッチファイルを編集して、あなたが実行しているコマンドにSTART /Bを追加することができます。

例えば、私はPuTTYを実行するバッチファイルがあり、同じ問題(余分なCMD)を持っていたので、これは私がそれを書いた方法です:

 @ ECHO OFF 
 START/B PuTTY.exe -load name_of_my_config_file

それは完璧に機能しました。

4
Adonis Darwish

これを試してみてください。

START /B batchfile

barlopでメモを追加しました

開始しますか。/Bの言う

 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.
4

私はあなたの問題に関してはっきりしていません、しかし、私のバッチファイルのいくつかで、私は唯一の目的がメインバッチファイルを起動することである「ダミー」を使います。

だからGO.BATがあります:

cmd /c go2.bat %1 %2 %3
exit

出口はコマンドプロンプトウィンドウを閉じますが、そうでなければ開いたままになります。

そしてGO2.BATは私が望む実際にバッチファイルの内容を持つでしょう。

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...
3
therube

RunHiddenConsole を使用できます

hideExec.bat

@echo off
RunHiddenConsole batch.bat
3
Jens A. Koch

それでもコンソールウィンドウをまったく表示しないことに興味があるなら、 こちら は私のために働いたstackoverflowからの解決策です(私の場合私はしませんでした)レジストリに何かを入れますが、必要な場所に入れます。

1
raviolli

/ bスイッチをパスの前に置くだけです。 2番目のコマンドプロンプトは開きません。

0
Jesse

これまでのところ、Indagoの答え が私にとって最良の解決策です。 VBSファイルを使用すると、スクリプトを使用してバッチの機能を実行でき、そもそもCMDウィンドウが表示されなくなります。いくつか注意点があります。

  1. バッチに管理者権限が必要な場合は、VBSを呼び出す既存のバッチを作成または使用して、そのバッチを管理者として実行します。

  2. 目に見えない状態で、あなたがやろうとしていることが実際にあなたが望むやり方で走っているかどうかを見分けるのは難しいかもしれません。

それにもかかわらず、私はそれを統合する前に、それがあなたが望む通りに動作していることを確かめるために最初に少し模擬セットアップ/単体テストをしたいと思います。

0

私は過去に cmdow を使用しましたが、それは私が欲しいもののためにうまくいったようです。

おそらく以下のオプションのうちの1つを使いたいでしょう:CMDOW [window] /HID

/HIDは指定されたウィンドウを隠します

CMDOW [window] /END

/ENDは指定されたウィンドウを閉じます

CMDOW [window] /CLS

/CLSは丁寧にウィンドウを閉じるように要求しました(ウィンドウによってはダイアログボックスが開く場合があります)

お役に立てれば。

0
sonrad10