web-dev-qa-db-ja.com

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

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

私はそれをするためにあるプログラムを使用したくない、私はもっときれいなものを探しています。私は VBScriptを使った解決策 を見つけましたが、私はVBSを使うのも嫌いです。

131
Moayad Mardini

解決策1:

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

CreateObject( "Wscript.Shell")。 "" ""&WScript.Arguments(0)& "" "、0、Falseを実行します。

見えないようにプログラムやバッチファイルを実行するには、次のように使用します。

wscript.exe "C:\ Wherever\invisible.vbs" "C:\その他の場所\ MyBatchFile.bat"

引数のリストを渡したり中継したりできるようにするには、二重引用符を2つだけ使用します。

CreateObject( "Wscript.Shell")。 ""&WScript.Arguments(0)& ""、0、Falseを実行します。

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

解決策2:

コマンドラインツールを使って静かにプロセスを起動します。 静かhidecon または hideexec

114
harrymc

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

25
Paul Cheselske

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

それにパラメータを渡して隠しバッチファイルを実行します -

cmdow/run/hid mybat arg1 "arg 2"

8
joe

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

長所:

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

短所:

 Limited to one line, so many characters
8
Jack S

対話式にせずにatジョブを介してスクリプトを実行します。

at 11:00 script.bat

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

例:

import os

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

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

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

nircmd.exe win hide ititle "cmd.exe"

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

title MyBatch
nircmd.exe win hide ititle "MyBatch"
6
BijaN-R

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

enter image description here

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

6
djangofan

あなたはそれを簡単に最小化して実行することができます。

start /MIN batch.cmd
5
Brad Gilbert

優れた Bat To Exe Converter は、.batまたは.cmdファイルを.exeファイルに変換します。

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

これがメインのインターフェースウィンドウのスクリーンショットです。


この画像は古くなっています。それはバージョン2.4.8を示しており、そして2018年9月の時点で、ウェブサイトはバージョン3.0.10.0(最終更新2018-03-23)を提供しています。

警告:www.f2ko.deのウェブサイトはcoinhive.comにリンクしています。これは wide識別asmalware

3
BullyWiiPlaza

それとは別に、C/C++から、CreateProcess関数をCREATE_NO_WINDOWフラグと共に使用することです。ここには示されていませんが、それにはたくさんの余分な力があります。これは、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 );
3
Swiss Frank

AutoHotkey スクリプトを作成することもできます。

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
3
endolith

誰かが「サイレント」を実行する7-8の方法のリストを作ったようです:

http://forums.techguy.org/dos-other/644932-solved-howto-run-batch-file.html

3
Rolnik

私はこのように 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. すべてのウィンドウで[同意する]をクリックします

今すぐあなたはそれをダブルクリックしてインストールした後、あなたの.batが完全に隠されて実行されることを.exeファイルがあるでしょう。

2
ZEUS

別の回答をここに追加 post 重複していたので、この解決策が表示されないため、現在、17の異なる回答を実行する方法があります非表示のバッチファイル。近い将来、ある時点でその投稿の回答を削除します。

バッチロジックとコマンドを含むバッチスクリプトを作成し、.VBS拡張子を持つ新しいファイルを作成し、以下のロジック(以下に示す例を使用)を使用して、.CMDまたは.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
Pimp Juice IT

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

1
npocmaka

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

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

1
sgmoore

私はすでにこれに答えたにもかかわらずここで別のアプローチです。異なるのは、バッチスクリプトが実行中に自分自身を隠すことができるということです。ただし、 - windowMode.bat および getCMDPidという2つのスクリプトが必要になります。 bat (どちらも.netコードを含みます)。ここでどのようにそれから使用することができます:

@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
1
npocmaka
cmdow /run /hid "file.extention" arg1 "arg 2"
1
malak

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

私はこれをエクスプローラのコンテキストメニューのレジストリ "コマンド"で持っていました:

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.batC:\Progra~1\myprogram.batとして参照する必要があります。 8.3ファイル名を見るにはdir /xを使ってください。

0
bortao

私は RunApp を作成してこのような仕事をし、また私のプロダクション環境でそれを使用しています。

以下のような設定:

ファイル:config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

代わりにrunapp.exeを起動してください。

0
James Yang

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

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

私は同じ問題を抱えていたが、それを考え出した:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)

0
Alan Panayotov