完全に隠された方法でバッチファイルを実行する


139

私は、ユーザーに見えるものなしでバッチファイル(.bat)を実行する方法を探しています(ウィンドウもタスクバー名もありません。など)。

私はそれをするために何らかのプログラムを使いたくありません、私は何かもっときれいなものを探しています。VBScriptを使用するソリューションを見つけましたが VBSの使用もあまり好きではありません。


ハハ!絶対にありません。時々バッチファイルを実行するWindowsサービスを開発しています。
モアヤドマルディーニ

4
Windowsサービスはバッチファイルとして実行されません。それらはサービスとして実行されます。あなたは質問を明確にする必要があります-書かれたように、コメントでそれは私には意味がありません。
CarlF

1
バッチファイルを実行するWindowsサービスがあります。サービスがバッチファイルであることではありません。
モアヤドマルディーニ

1
あなたはどの言語でサービスを書いていますか?
ヒューアレン

hstartもあります。
barlop

回答:


119

解決策1:

この1行のテキストをファイルとして保存しますinvisible.vbs

CreateObject( "Wscript.Shell")。Run "" ""&WScript.Arguments(0)& "" ""、0、False

プログラムまたはバッチファイルを非表示で実行するには、次のように使用します。

wscript.exe "C:\ Wherever \ invisible.vbs" "C:\ Some Other Place \ MyBatchFile.bat"

引数のリストを渡す/リレーできるようにするには、2つの二重引用符のみを使用します

CreateObject( "Wscript.Shell")。Run ""&WScript.Arguments(0)& ""、0、False

例: Invisible.vbs "Kill.vbs ME.exe"

解決策2:

:静かにプロセスを起動するためのコマンドラインツールを使用して静かなhideconまたはhideexecを


2
なぜ二重引用符が4つあるのか、説明してください。
スタークス

非表示のプログラムを起動する必要がある場合はどうなりますか?
スタークス

5
@Starx VB構文。&文字列を連結することを意味します。文字列は二重引用符(")で囲みます。""文字列区切り文字内の連続する二重引用符()は、リテラルの二重引用符(")を意味します。したがって、4つの二重引用符("""")は、1文字の文字列リテラル、二重引用符(")になります。それを一緒に入れて、と"""" & WScript.Arguments(0) & """"なる"<argument>"。ここで、<argument>スクリプトに渡された最初のコマンドライン引数です。
ボブ

4
すべての引数を渡すように変更する方法は?引数を引用せずに渡す方が便利です。
Ctrl-C

2
これwscript.exe "C:\Wherever\invisible.vbs" ...により、内部を配置するためのバッチファイルを作成する必要はありませんか?
エンドリス

26

バッチファイルまたはコマンドファイルまたは任意のファイルを非表示にするには... Windows XPビルトインIExpress.exeユーティリティを使用して、バッチファイルから.EXEをビルドします。使用IExpressするときは、非表示の実行オプションをチェックし、何も表示しないことについてすべてのボックスをチェックしてください。.exeを作成した後、選択した実行コマンドフォルダーに配置すると、表示されることはありません。


1
ああ、実際には良い解決策です。
カミロマーティン

7
windows 7のような新しいwindowsバージョンにはlexpress.exeに相当するものはありますか?
Sнаđошƒаӽ

@Sнаđошƒаӽそれはwindows 7にあります......テストしたばかりです
-DarthRubik

@DarthRubikそれを共有してくれてありがとう。私もテストしましたが、うまく動作します。答えに賛成する時間です。:)
Sнаđошƒаӽ

「Command.com」はもはや存在のようですので、これは、Windows 10 64で動作するようには思えません
アルネS

10

use CmdowはNT4 / 2000 / XP / 2003用のWin32コマンドラインユーティリティで、ウィンドウの一覧表示、移動、サイズ変更、名前変更、非表示/非表示、無効化/有効化、最小化、最大化、復元、アクティブ化/非アクティブ化、クローズ、強制終了、もっと。

パラメータを渡して非表示のバッチファイルを実行します-

cmdow / run / hid mybat arg1 "arg 2"


しかし、このコマンドはどのように実行しますか?
モアヤドマルディーニ

9
cmdowは、ほとんどのウイルス対策製品によってマルウェアとして検出されます。したがって、このソリューションをPC以外の場所で使用することは困難です。
ガネーシュR.

@Ganesh:より良い解決策はありますか?
モアヤドマルディーニ

オープンソースですか?オープンソースではなく、harrymcの1行のvbscriptを実行して同じことを行うことができる場合、トロイの木馬をパッキングできるサードパーティのアプリを使用する意味はありません(スレッドの上部にある回答を参照)。
thebunnyrules

1
まあ、それはオープンソースなので、それはかなり素晴らしいです。ソースコードはこちらから入手できます:github.com/ritchielawrence/cmdow
thebunnyrules

9

バッチファイルが1行と非常に多くの文字に収まる場合は、ランダムディレクトリに置かれたフォルダー内を右クリックしてショートカットを使用し、ウィザードの残りの部分をスキップして、最後に作成したショートカットを右クリックし、プロパティをクリックし、ターゲットの下に、通常batファイルに入れるものを入力します。ボブスおじさん!

長所:

 No Command Window
 Ability to use an icon
 Same Functionality of bat file

短所:

 Limited to one line, so many characters

唯一の問題は、ファイルタイプをショートカットに関連付けることができないことです。したがって、エクスプローラでバッチスクリプトをダブルクリックして開きたい場合は、.batファイルが必要です。
ビョルンリンドクヴィスト14年

私はまだボブおじさんを見つけようとしています、どこにでもいます!!
ピンプジュースIT

7

スクリプトをインタラクティブにせずにatジョブを介して実行します。

at 11:00 script.bat

別の解決策として、Pythonのようなものをインストールしてもかまわない場合は、スクリプトを作成して実行するだけですpythonw(GUI操作のリンクバージョン)。グラフィカルAPIを使用していないため、ウィンドウは表示されません。への呼び出しを使用するだけでos.system()、コマンドラインに文字列を入力するのと同じように、バッチスクリプトを模倣します。

例:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")

3
しかし、このコマンドはどのように実行しますか?
モアヤドマルディーニ

スケジュールされたタスクをスケジュールするか、サービスを作成する必要があります。
Unfundednut

追加された例。
ジョンT


6

Windows7を使用すると、「スケジュールされたタスク」コントロールパネルを使用して、指定された権限で、さらには「SYSTEM」アカウントとしても見えないようにバックグラウンドで実行するバッチファイルをスケジュールできます。以下のスクリーンショットをご覧ください。

ここに画像の説明を入力してください

さらに、それほど多くの機能はありませんが、「/ interactive」オプションなしで「AT.exe」コマンドを使用して、コマンドラインからこのような非表示のバッチスクリプトタスクを作成することもできます。


3
隠されたチェックボックスは、単にタスクスケジューラのユーザーインターフェイス(からタスク隠す
Souravゴーシュ

悪いアイデアとして、「システム」特権を必要としない(およびセキュリティの弱点について精査されておらず、強化されていない)タスクを「システム」として実行する。こちらのコメントをご覧ください
スコット

6

私はVBScriptソリューションが好きではありません。

nircmd.exeをダウンロードして%systemroot%\system32フォルダーにコピーし、このコマンドをバッチの最初の行に追加します。

nircmd.exe win hide ititle "cmd.exe"

または、titleコマンドで最初にバッチタイトルをカスタムにしてcmd、次のようにすべてのウィンドウを非表示にしないようにします。

title MyBatch
nircmd.exe win hide ititle "MyBatch"

私はこの正確な方法を使用しましたが、しばらくの間、nircmdがcmdウィンドウを非表示にせず、タスクバーに最小化され、クリックしても復元できないことに失敗しました。...なぜ知ってはいけない
ジェームズ・ヤン



3

C / C ++からのもう1つの方法は、CREATE_NO_WINDOWフラグを指定してCreateProcess関数を使用することです。ここには示されていない追加のパワーがたくさんあります。これは、system()または_spawn()ファミリーを置き換えるのに必要な最小限のものです。

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window.  CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi  ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

1
WINAPIアプローチの正解。答えに加えて、ソースコードとアプリケーションを次に示します。
アレックス

3

優れたエグゼコンバータバットはあなたの変換されます.bat.cmdにファイルを.exeファイル。

シンプルなUIがあります。「非表示アプリケーション」オプションを選択すると、コンソールウィンドウを表示しないように選択できます。また、アイコン、パッケージ関連ファイル、および他のいくつかのオプションを割り当てることができます。

メインインターフェイスウィンドウのスクリーンショットは次のとおりです。


この画像は古いことに注意してください。バージョン2.4.8が表示され、2018年9月の時点で、Webサイトはバージョン3.0.10.0(最終更新2018-03-23)を提供しています。

警告:www.f2ko.deのWebサイトへのリンクはcoinhive.comマルウェアとして広く 識別さ れてい ます


2

私はこの方法でnircmdで成功しました

  1. リンクからnircmd.exeをダウンロードします
  2. .batファイルを作成します
  3. .batファイルの最初の行はこれでなければなりません: nircmd.exe win hide ititle "cmd.exe"
  4. 両方のファイルを選択し、winrarを使用して自己抽出ファイルを作成します
  5. 「一般」タブで、「自動抽出ファイルの作成」ボックスをチェックします
  6. 「詳細」タブで「自動抽出」ボタンを選択します
  7. 新しいウィンドウがあり、「モード」タブを選択してから、オプション「すべてを隠す」を選択します
  8. 「更新」タブを選択し、「既存のファイルを上書きする」オプションを選択します
  9. 「一般」タブを選択し、必要に応じて抽出先フォルダーを定義し、「抽出後に実行」ボックスに.batが抽出されるフルパスを入力します。例:抽出フォルダーを「c:\ windows \」として定義した場合、抽出後に実行するフルパスは「c:\ windows \ file.bat」(。batの名前がfile.batの場合) )
  10. すべてのウィンドウで[同意する]をクリックします

これで.exeファイルが作成され、それをクリックしてインストールすると、.batは完全に非表示で実行されます。


1
cmdow /run /hid "file.extention" arg1 "arg 2"

3
コマンドの簡単な説明を含めてください。これは、コマンドをコピーして使用するだけでなく、OP(およびその他)がその動作を理解するのに役立つ場合があります。
ブラッドフィリア


'cmdow' is not recognized as an internal or external command, operable program or batch file.
Bacco

1

特別なことをする必要はありません。

Windowsサービスからバッチファイルを実行している場合、サービスで[デスクトップとの対話をサービスに許可する]オプションを有効にしない限り、デフォルトで非表示になります。


1

重複していたため、別の投稿から私の答えをここに追加し、このソリューションはここに表示されないため、非表示のバッチファイルを実行する方法について17の異なる答えがあります。近い将来、ある時点でその投稿の回答を削除します。

バッチロジックとコマンドを含むバッチスクリプトを作成し、.VBS拡張子を持つ新しいファイルを作成し、以下のロジック(以下に示す例)を使用し、などのコマンドで.CMDor .BATファイルへのフルパスをプラグインしますPING -t <IPAddress>。バッチを非表示で実行し、実行時にコマンドウィンドウを表示しません。

以下の例のロジックではC:\Folder\BatchFileName.cmd、現在手動​​で実行しているコマンドなどを含むバッチスクリプトを指すように変更を指定しています。

.VBSファイルを保存して、Task Scheduler Windows7でタスクをスケジュールする際の問題でスケジュールし、ニーズに合わせて無期限のスケジュールで実行します。

それ以外の場合は、.VBSファイルをダブルクリックして、PING必要に応じてポイントするバッチファイルに入れた無限のコマンドを実行します。

注: これは、このスクリプトロジックの取得元であると考えられますが、バッチファイルが実行されたときにコマンドウィンドウが非表示になるようにするために、ここで必要な目的と同じ目的で確実に動作しますServer Fault Source

VBSスクリプト実行コマンドラインバッチ非表示CMDウィンドウの例

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing

1

ここでは、外部ツールなしでバッチを使用して隠しプロセスを開始することを知っているすべての方法をコンパイルしました。すぐに使用できるスクリプト(オプションが豊富なものもあります)で、すべてがコマンドラインを形成します。 PIDが返されます。使用されているツールはIEXPRESS、SCHTASKS、WScript.Shell、Win32_ProcessおよびJScript.Netです。


1

私はすでにこれに答えましたが、別のアプローチがあります。ここで異なるのは、実行中にバッチスクリプトが自分自身を隠すことができることです。ただし、windowMode.batgetCMDPid.bat(両方とも.netコードを含む)の2つの追加スクリプトが必要です。ここでどのように使用することができます:

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit


0

私はこれを理解しようと試みましたが、実際には成功しませんでした。これは私が得たのと同じくらい近かった:

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul

0

エクスプローラーのコンテキストメニューから呼び出されるバッチファイルのウィンドウを非表示にする必要があり、パラメーターに引用符を追加する必要もありました。答えはどれも私には役に立たなかったので、私は自分のソリューションを追加しています。

エクスプローラーのコンテキストメニューのレジストリ「コマンド」にこれがありました。

cmd /c C:\mypath\myprogram.bat "%1"

それを置き換えるには、次のようなvbsを作成する必要がありました。

WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False

次のような場所に保存しC:\mypath\myscript.vbs、レジストリで次のように呼び出します。

wscript "C:\mypath\myscript.vbs" "%1"

.batパスにはスペースを使用できないため、8.3ファイル名に置き換えてください。したがって、たとえばC:\Program Files\myprogram.batとして参照する必要がありますC:\Progra~1\myprogram.bat。8.3ファイル名を表示するにはdir /x


0

このような仕事をするためにRunAppを作成し、実稼働環境でも使用しています。これが役立つことを願っています。

以下のような設定:

ファイル:config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

runapp.exe代わりに起動します。


-1

これはWindows 8(おそらく他の)で動作します

  1. 通常どおりバッチファイルを作成する
  2. バッチファイルへのショートカットを作成する
  3. ショートカットを右クリック>プロパティ
  4. レイアウトをクリック
  5. 「システム位置ウィンドウを表示」のチェックを外します
  6. 左位置を設定tp -1000
  7. 適用をクリックします

  8. ショートカットをクリックすると実行されますが、表示されません:)


4
本当に?これはタスクバーのボタンとして表示されませんか?
スコット14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.