この質問にはすでに答えがあります:
Windows XPでは、「黒いウィンドウ」なしで、ショートカットを介してバッチ(.batまたは.cmd)ファイルを実行できますか?
この質問にはすでに答えがあります:
Windows XPでは、「黒いウィンドウ」なしで、ショートカットを介してバッチ(.batまたは.cmd)ファイルを実行できますか?
回答:
次をwscriptとして保存します。たとえば、「testing.bat」をバッチファイルの名前に置き換えた後、hidecmd.vbsを保存します。
Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false
2番目のパラメータは、oShell.Run
あるintWindowStyle
プログラムのウィンドウの外観を示す値とゼロ値は隠されたウインドウのためのものです。
.bat
この方法を使用して管理者としてファイルを実行する方法は?
これは、シャジの答えを単純化したものです。次のようなVBScript(.vbs)スクリプトを使用してバッチスクリプトを実行できます。
'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True
これにより、コマンドウィンドウが表示されずにバッチファイルが実行されます。
.bat
この方法を使用して管理者としてファイルを実行する方法は?
「Windows Scriptingを使用する」という回答(既に組み込まれているので私が最もよく考える)を展開するために、単一のラッパースクリプトを使用し、「実際の」バッチファイルの名前をパラメーターとして渡す方法を説明します。追加のパラメーターがバッチファイルに渡されます。
If WScript.Arguments.Count >= 1 Then
ReDim arr(WScript.Arguments.Count-1)
For i = 0 To WScript.Arguments.Count-1
Arg = WScript.Arguments(i)
If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
arr(i) = Arg
Next
RunCmd = Join(arr)
CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If
たとえば、上記のファイルをNoShell.vbs
どこかに保存してから呼び出します:
NoShell.vbs c:\foo\my_batch_file.bat
最後に、.vbsファイルを理解していない場所(Visual Studioの "外部ツール"など)からこれを実行する場合は、vbsファイルをC:\Windows\System32\wscript.exe
最初のパラメーターとして呼び出し、 2番目のバッチファイル。
"C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat
。
"C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat
。パスに何をしようとしても、すべてを二重引用符で囲み、スペースの代わりに%20、またはこれら2つの組み合わせを使用しても、何も機能しません。ファイルが見つからないか、何も起こらないというエラーメッセージが表示されます。これは、ユーザーのエラー、ショートカットのターゲットフィールドのWindowsの制限、またはスペースを含むファイルパスを適切に処理しないvbsスクリプトの問題が原因ですか?
'/ B'オプションでstartを使用します。例えば:
@echo off
start /B go.bat
start /b
新しいコンソールを作成する代わりに、現在割り当てられているコンソールでプログラムを実行します。バッチはcmdで実行する必要があるので、とにかく新しいものを取得します(これにより[サプライズ]、コンソールが開きます)。
SYSTEM
C / C ++など)を通じて他のアプリケーションからバッチファイルを起動する場合に非常に便利です。
cmd /c foo.cmd
。start
これらのシナリオでは絶対に使用する必要はありません。私は、をsystem
支持して使用すべきではないと主張しCreateProcess
ます。バッチファイルを起動することで、すでに1つのプラットフォームに依存しているので、ジョブに適したツールを使用することもできます。
cmd /c
ます。cmdのコマンドは、私は私の場合には必要なものですが、別のバッチファイルを実行するバッチファイルについて、私がこれまでに見つかったすべてのstackexchange回答、...起動を使用するために、トップの答えを持っている
start /b go.bat
新しいコンソール(conhost.exeのインスタンス、またはWindows 7より前のcsrss.exeのスレッド)は割り当てられません。ただし、同じコンソールに接続されているcmd.exeの新しいインスタンスを使用してバッチスクリプトが実行されるため、混乱を招きます。シェルの両方のインスタンスは、通常は交互に、コンソールからの入力を読み取るために競合します。2番目のインスタンスで待機するために/w
(たとえばstart /b /w go.bat
)が必要です。これは、を使用するcmd /c
場合の使用に似ていsystem
ます。また、を呼び出している場合はCreateProcess
、go.bat
直接実行します。の必要はありませんcmd /c
。
無料のGPLオープンソース「隠れたプロセスの作成」
http://www.commandline.co.uk/chp/
Microsoft Security Essentials、およびおそらく他のほとんどのウイルス/マルウェアスキャナーは、実行可能ファイルchp.exeをウイルスとして扱います。これは、指定したプログラムがウィンドウまたはタスクバーボタンを表示しないようにするためです。
それはウイルスではありません。たとえば、ターゲットプロセスがタスクマネージャーに表示されるのを隠しません。そしてもちろん、ソースコードが含まれているので、あなたはそれが非常に小さく、あなたが与えるどんなプログラムでも実行する以外何もしないことがわかります。
含まれているchp.exeが実際にそのソースからビルドされたことを信頼する必要さえありません。先に進み、付属のchp.exeを破棄し、ソースから独自にコンパイルすることができます。そうするために必要なツールはすべて無料でダウンロードできます。
.batまたは.cmdファイルへのショートカットを作成し、ショートカット、プロパティ、ショートカットタブ、実行:最小化を右クリックすることもできます。次に、スケジュールされたタスクで、.bat / .cmdファイルの代わりにショートカットを直接使用します。これにより、ウィンドウがポップアップしなくなりますが、タスクバーボタンは表示されたままです。
AutoItなどのウィンドウスクリプトを使用できます。
例として、これをAutoItスクリプトエディタに書き込むだけです。とても簡単です
Run("C:\test\batchfile.bat", "", @SW_HIDE)
ループで実行したい場合は、
$x=0
Do
Run("C:\test\batchfile.bat", "", @SW_HIDE)
Sleep(5000)
Until $x = 1
.exeとしてコンパイルします-これで完了です。
同様に、AutoHotkeyで:
#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
ヒドゥンスタートを使用 (20ドルの費用)
非表示の開始-コンソールウィンドウまたはUACプロンプトなしでアプリケーションとバッチファイルを実行する
コンソールアプリケーションとバッチファイルは、Windowsの起動時またはスケジュールで定期的に実行されます。これの主な不都合は、各アプリケーションが画面上でちらつくコンソールウィンドウを開くことです。Hidden Start(またはHstart)は、バックグラウンドでウィンドウなしでコンソールアプリケーションとバッチファイルを実行したり、Windows 7およびVistaでUAC特権の昇格を処理したり、複数のコマンドを並列または同期で開始できるようにする軽量コマンドラインユーティリティです。
特別なプログラムを使用しないシンプルなソリューション。
幸運を!