web-dev-qa-db-ja.com

別の.EXEファイルを実行する.BATファイルのコマンドウィンドウを非表示にする

これはWindowsのバッチファイルです。

ここに私の.batファイルがあります

@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"

"C:\ThirdParty.exe"

これは、「ThirdParty」アプリケーションの実行中に.batファイルがコマンドウィンドウを開いたままにすることを除いて、正常に機能します。
コマンドウィンドウを閉じる必要があります。

アプリケーションにショートカットを使用しますが、最初にこのコピーコマンドを実行できる必要があります(実際にアプリケーションに使用するデータベースとサーバーを変更します)。

ThirdPartyアプリケーションでは、ユーザーがdbまたはアプリケーションサーバーのソースを変更することはできません。

ユーザーがテスト環境から本番環境に変更できるようにするためにこれを行っています。

53
JeffO

startを使用するとうまくいきます:

@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe

編集:[OK]、よく見ると、startは、引用符で囲まれている場合、最初のパラメーターを新しいウィンドウタイトルとして解釈するようです。したがって、ThirdParty.exeへのパスを引用する必要がある場合は、タイトル文字列も指定する必要があります。

例:

:: Title not needed:
start C:\ThirdParty.exe

:: Title needed
start "Third Party App" "C:\Program Files\Vendor\ThirdParty.exe"
43
cg.

.vbsこのコードのファイル:

CreateObject("Wscript.Shell").Run "your_batch.bat",0,True

この .vbsは実行されますyour_batch.bat非表示。

私にとってはうまくいきます。

22
jlenfers

これを試して:

@echo off 
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe
exit
9
QAZ

素晴らしいヒント。 Javaプログラムも実行しているバッチファイルで動作します。

start javaw -classpath "%CP%" main.Main
7
Josy

スクリプト言語を使用していない限り、startを使用しても問題ありません。幸いなことに、Python-pythonw.exe の代わりに python.exe

:: Title not needed:
start pythonw.exe application.py

引用符が必要な場合は、次を実行します。

:: Title needed
start "Great Python App" pythonw.exe "C:\Program Files\Vendor\App\application.py"
6
mzuther

あなたは私の silentbatch プログラムを試すことに興味があるかもしれません。これは.bat/.cmdスクリプトを実行し、コマンドプロンプトウィンドウの作成を完全に抑制します表示されてから消えます)、オプションで指定されたファイルに出力を記録します。

3
jamesdlin

ウィンドウを非表示にするVBSスクリプトを作成できます。

Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("""C:\Program Files (x86)\McKesson\HRS
Distributed\SwE.bat""", 0)
set WshShell = Nothing

次に、バッチファイルを実行するのではなく、スクリプトを実行します。

3
Paul Barnett

私はネイティブにそれを行う良い方法を実際に見つけていないので、私は hstart というユーティリティを使用するだけです。よりきれいな方法があれば、それはいいことです。

3
Oskar Duveborn

または、次を使用できます。

Start /d "the directory of the executable" /b "the name of the executable" "parameters of the executable" %1

%1がファイルの場合、実行可能ファイルに渡されます。たとえば、notepad.exe foo.txtの%1は "foo.txt"です。

開始コマンドの/bパラメーターはこれを行います。

新しいコマンドプロンプトウィンドウを開かずにアプリケーションを起動します。 CTRL+C アプリケーションが有効にしない限り、処理は無視されます CTRL+C 処理。つかいます CTRL+BREAK アプリケーションを中断します。

まさに私たちが望むものです。

2
Egoadsr

Batch2Exe http://www.f2ko.de/programs.php?lang=en&pid=b2e を使用して、バッチファイルを実行可能ファイルにコンパイルします。 「非表示ウィンドウ」オプションを使用します。

2
Vinayak Gadkari

これを使用してください、上記は動作しません。 Windows Server 2003でテストしました。

@echo off 
copy "C:\Remoting.config-Training" "C:\Remoting.config"
Start /I "" "C:\ThirdParty.exe"
exit
1
Anmol Gupta

.exeファイルを実行する.batファイルのコマンドウィンドウをできるだけ早く終了するには、実行するファイルの前に@start行を使用します。以下に例を示します。

(insert other code here)
@start executable.exe
(insert other code here)

@start executable.exeで他のコードを使用する必要はありません。

1
user7669241

Windows APIを使用して、新しいプロセス、コンソールアプリケーションを開始し、その「黒い」ウィンドウを非表示にすることができます。これはプロセスの作成時に行うことができ、「黒い」ウィンドウをまったく表示しないようにします。

CreateProcess 関数では、dwCreationFlagsパラメーターに CREATE_NO_WINDOW フラグを含めることができます。

The process is a console application that is being run
without a console window. Therefore, the console handle
for the application is not set. This flag is ignored if
the application is not a console application

このメソッドを使用して hide-win32-console-window実行可能ファイルソースコード へのリンクを次に示します。

hide-win32-console-windowJamesdlinのsilentbatchプログラム と似ています。

未解決の質問があります:ウィンドウが存在しない場合、プログラムの出力をどうしますか?例外が発生したらどうしますか?出力を破棄するのは良い解決策ではありません。 hide-win32-console-windowは、匿名パイプを使用して、プログラムの出力を現在のディレクトリに作成されたファイルにリダイレクトします。

使用法

batchscript_starter.exefull/path/to/application[arguments to渡す]

例python script

batchscript_starter.exe c:\Python27\python.exe -c "import time; print('prog start'); time.sleep(3.0); print('prog end');"

出力ファイルは、pythonコマンドからの出力とともに、python.2019-05-13-13-32-39.logという名前の作業ディレクトリに作成されます。

prog start
prog end

実行コマンドの例

batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C dir .

出力ファイルは、CMDからの出力とともにcmd.2019-05-13-13-37-28.logという名前の作業ディレクトリに作成されます。

 Volume in drive Z is Storage
 Volume Serial Number is XXXX-YYYY

 Directory of hide_console_project\hide-win32-console-window

2019-05-13  13:37    <DIR>          .
2019-05-13  13:37    <DIR>          ..
2019-05-13  04:41            17,274 batchscript_starter.cpp
2018-04-10  01:08            46,227 batchscript_starter.ico
2019-05-12  11:27             7,042 batchscript_starter.rc
2019-05-12  11:27             1,451 batchscript_starter.sln
2019-05-12  21:51             8,943 batchscript_starter.vcxproj
2019-05-12  21:51             1,664 batchscript_starter.vcxproj.filters
2019-05-13  03:38             1,736 batchscript_starter.vcxproj.user
2019-05-13  13:37                 0 cmd.2019-05-13-13-37-28.log
2019-05-13  04:34             1,518 LICENSE
2019-05-13  13:32                22 python.2019-05-13-13-32-39.log
2019-05-13  04:55                82 README.md
2019-05-13  04:44             1,562 Resource.h
2018-04-10  01:08            46,227 small.ico
2019-05-13  04:44               630 targetver.h
2019-05-13  04:57    <DIR>          x64
              14 File(s)        134,378 bytes
               3 Dir(s)  ???,???,692,992 bytes free

.batスクリプトを実行するためのショートカットの例

Shortcut for starting windowless .bat file

Targetフィールド:

C:\batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C C:\start_wiki.bat

Start inフィールドで指定されたディレクトリは、出力ファイルを保持します。

1
Alex

別のユーザーで実行してください。これがWindowsボックスであると仮定して、スケジュールされたタスクのユーザーアカウントを作成します。そのユーザーとして実行します。コマンドプロンプトは、現在ログインしているユーザーに対してのみ表示されます。

1
Joe

これを使用して、C#からcmdファイルを開始しました。

Process proc = new Process();
proc.StartInfo.WorkingDirectory = "myWorkingDirectory";
proc.StartInfo.FileName = "myFileName.cmd";
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();
1
Mike