web-dev-qa-db-ja.com

Windowsバッチファイルを実行し、コマンドウィンドウを非表示にするにはどうすればよいですか?

Windowsバッチファイルを実行してコマンドウィンドウを非表示にするにはどうすればよいですか?ファイルの実行中にcmd.exeを画面に表示したくありません。これは可能ですか?

30
barfoon

unmanaged program を記述し、 CreateProcess APIを使用する場合は、タイプのlpStartupInfoパラメーターを初期化する必要があります [〜#〜 ] startupinfo [〜#〜] 構造体のwShowWindowフィールドが SW_HIDE であり、dwFlagsで_STARTF_USESHOWWINDOW_フラグを使用することを忘れないように [〜#〜] startupinfo [〜#〜] のフィールド。別の方法は、 CREATE_NO_WINDOWdwCreationFlagsパラメーターのフラグを使用することです。 ShellExecute および ShellExecuteEx 関数でも同じトリックが機能します。

managed application を作成する場合は、 http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindowからのアドバイスに従う必要があります。 aspxProcessStartInfoを_CreateNoWindow = true_および_UseShellExecute = false_で初期化してから、のパラメーターとして使用します。 WindowStyleのプロパティProcessStartInfoを代わりに、または_ProcessWindowStyle.Hidden_と一緒に_CreateNoWindow = true_に設定できる場合とまったく同じです。

は、wcsript.exeで始まるVBS script を使用できます。スクリプト内で、CreateObject("WScript.Shell")を使用し、2番目の(intWindowStyle)パラメーターとして0を指定して Run を使用できます。例として http://www.robvanderwoude.com/files/runnhide_vbs.txt を参照してください。 Kix、 PowerShell などに進みます。

プログラムを作成したくない場合は、既存のユーティリティのように使用できます CMDOW/RUN/HID "c:\ SomeDir\MyBatch.cmd"hstart/NOWINDOW/D = c:\ scripts "c:\ scripts\mybatch.bat"hstart/NOCONSOLE "batch_file_1.bat" まったく同じです。このような種類の無料のユーティリティがきっと見つかるはずです。

一部のシナリオ(たとえばNCパスから開始)では、作業ディレクトリもローカルパス(_%SystemRoot%\system32_常に動作するように設定することが重要です。 )。これは、非表示のバッチを開始する上記のバリアントからの使用に重要です。

39
Oleg

C#を使用すると、ウィンドウを開かずにバッチコマンドを簡単に開始できます。次のコード例をご覧ください。

        Process process = new Process();
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.FileName = "doSomeBatch.bat";
        process.Start();
8
BitKFu

任意の実行可能ファイルについて、「c」パラメーターを指定したcmdを使用してプログラムを実行できます。

cmd /c "your program address"\"YourFileName".bat  

(->バッチファイルの場合!)最終的な解決策として、.cmdファイルを作成し、このコマンドをそのファイルに含めることをお勧めします。

cmd /c "your program address"\"YourFileName".bat
exit

次に、この.cmdファイルを実行します。

5
rain

ここ外部ツールを使用せずにバッチで非表示プロセスを開始することがわかっているすべての方法をコンパイルしました。スクリプト(一部はオプションが豊富)を使用し、それらはすべてコマンドラインを形成します。可能な場合はPIDも返されます。使用ツールはIEXPRESS、SCHTASKS、WScript.Shell、Win32_Process、JScript.Netですが、すべてラップされています.batファイル。

4
npocmaka

technet からのこの小さなVBScriptはトリックを行います:

Const HIDDEN_WINDOW = 12

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")

Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
errReturn = objProcess.Create("mybatch.bat", null, objConfig, intProcessID)

編集mybatch.bat batファイル名に、vbsとして保存して実行します。

Docによると、Win7ではテストされていませんが、テストしただけで正常に動作します。実行するプロセスのウィンドウは表示されません

2
badbod99

ネイティブC++はOlegの回答の成文化バージョンです-これは、Boost Software Licenseの下で 私が取り組んでいるプロジェクト からコピー/貼り付けられています。

BOOL noError;
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInformation;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_HIDE;
noError = CreateProcess(
    NULL,                                           //lpApplicationName
    //Okay the const_cast is bad -- this code was written a while ago.
    //should probably be &commandLine[0] instead. Oh, and commandLine is
    //a std::wstring
    const_cast<LPWSTR>(commandLine.c_str()),        //lpCommandLine
    NULL,                                           //lpProcessAttributes
    NULL,                                           //lpThreadAttributes
    FALSE,                                          //bInheritHandles
    CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT,  //dwCreationFlags
    //This is for passing in a custom environment block -- you can probably
    //just use NULL here.
    options.e ? environment : NULL,                 //lpEnvironment
    NULL,                                           //lpCurrentDirectory
    &startupInfo,                                   //lpStartupInfo
    &processInformation                             //lpProcessInformation
);

if(!noError)
{
    return GetLastError();
}

DWORD exitCode = 0;

if (options.w) //Wait
{
    WaitForSingleObject(processInformation.hProcess, INFINITE);
    if (GetExitCodeProcess(processInformation.hProcess, &exitCode) == 0)
    {
        exitCode = (DWORD)-1;
    }
}

CloseHandle( processInformation.hProcess );
CloseHandle( processInformation.hThread );
2
Billy ONeal

バッチファイルを実行するだけのWindowsサービスを作成できます。サービスは独自のデスクトップセッションで実行されるため、コマンドウィンドウはユーザーに表示されません。

0
Chris O

Bat To Exe Converter を使用し、Batファイルを実行可能ファイルとしてコンパイルします。

手順:

  1. Bat to Exeコンバーターを開く
  2. Batファイルを選択してください
  3. オプションで「Invisible Application」を選択します
  4. コンパイルボタンを押して終了します
0
u01jmg3

right-clickを使用し、Create shortcutを選択して、batファイルへのショートカットを作成します。 Right-click作成したショートカットで[プロパティ]をクリックします。 [実行]ドロップダウンボックスをクリックし、[最小化]を選択します。

0
Papa Dilbert