web-dev-qa-db-ja.com

プログラムの起動後にコンソールを開いたままにせずにバッチファイルからプログラムを実行する方法を教えてください。

当分の間、私のバッチファイルはこのように見えます:

myprogram.exe param1

プログラムは起動しますが、DOSウィンドウは開いたままです。どうやって閉じることができますか?

173
Mister Dev

Exitキーワードを使用することができます。これは私のバッチファイルの1つからの例です:

start myProgram.exe param1
exit
154

バッチファイルがプログラムを待機しないようにするには、startコマンドを使用します。 "Start"の後に実行したいプログラムの前に空の二重引用符を入れることを忘れないでください。たとえば、Visual Studio 2012をバッチコマンドから実行する場合は、次のようにします。

Start ""  "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

開始後の二重引用符に注意してください。

234
Marshall

STARTコマンドを見て、これを行うことができます:

START rest-of-your-program-name

たとえば、このバッチファイルはメモ帳が終了するまで待機します。

@echo off
notepad c:\test.txt

しかし、これはしません:

@echo off
start notepad c:\test.txt

私の 自身の質問から

start /b myProgram.exe params...

既存のDOSセッションからプログラムを起動した場合に機能します。

そうでない場合は、vbスクリプトを呼び出します。

wscript.exe invis.vbs myProgram.exe %*

Windowsスクリプトホストの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
30
VonC

これは私がバッチファイルからJavaクラスを実行しようとしたときに私のために働いた唯一のものです:

start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm

適切な構文に従って、プロジェクトに合わせてstartコマンドをカスタマイズできます。

Syntax
      START "title" [/Dpath] [options] "command" [parameters]

Key:
   title      : Text for the CMD window title bar (required)
   path       : Starting directory
   command    : The command, batch file or executable program to run
   parameters : The parameters passed to the command

Options:
   /MIN       : Minimized
   /MAX       : Maximized
   /WAIT      : Start application and wait for it to terminate
   /LOW       : Use IDLE priority class
   /NORMAL    : Use NORMAL priority class
   /HIGH      : Use HIGH priority class
   /REALTIME  : Use REALTIME priority class

   /B         : Start application without creating a new window. In this case
                ^C will be ignored - leaving ^Break as the only way to 
                interrupt the application
   /I         : Ignore any changes to the current environment.

   Options for 16-bit WINDOWS programs only

   /SEPARATE   Start in separate memory space (more robust)
   /SHARED     Start in shared memory space (default)
18
Zosimas

あなたはこれを試すべきです。ウィンドウなしでプログラムを起動します。それは実際には一瞬点滅しますが、かなり早く消えます。

start "name" /B myprogram.exe param1
18
Chris Dail

「スペース問題」とローカル依存関係を解決する方法:

@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe

cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe

exit
12
Gilco

GUIからこれを行うための私の解決策:

  1. 実行したいプログラムへのショートカットを作成します。

  2. ショートカットのプロパティを編集します。

  3. TARGETフィールドを%COMSPEC% /C "START "" "PROGRAMNAME""に変更します。

  4. RUNフィールドをminimumに変更します。

準備完了あなたがそれをどのように好むか見てください...

PS:プログラムパラメータは、2つの最後の引用符の間に挿入できます。 PROGRAMNAME文字列は、ファイル名、相対パス、または絶対パスのどちらでもかまいません。絶対パスを入力してドライブ文字とセミコロンを消去すると、ホストコンピュータが割り当てた文字に関係なく、これはサムドライブで機能します。 ..(また、ショートカットを同じフォルダーに置き、PROGRAMNAME内のプログラムファイル名の前に%CD%変数を付けると、パスは常に一致します。同じトリックをSTART INフィールドで使用することもできます)。

0
Midas

このバッチファイルがスケジュールどおりにまたは常に実行したいものである場合。あなたは、Windowsのスケジュールツールを使用することができますし、バッチファイルを起動したときにウィンドウに表示されません。

Task Schedulerを開くには:

  • スタート - >ファイル名を指定して実行/検索 - > 'cmd'
  • taskschd.msc - > enterと入力

右側から、Create Basic Taskをクリックしてメニューに従います。

お役に立てれば。

0
Leustad

これが私の望ましい解決策です。それは 答え から同様の質問へと導かれます。

VBSスクリプトを使用してバッチファイルを呼び出します。

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

上記の行をエディタにコピーして、ファイルに拡張子.VBSを付けて保存します。

0
Ilyich

私はこの問題を抱えていました、そして、以下は私のために働きました:

run myprogram.exe param1
0
nikc