Bir toplu iş dosyasını tamamen gizli bir şekilde çalıştırın


139

Bir toplu iş dosyası (.bat) kullanıcı tarafından görülebilen herhangi bir şey olmadan (pencere, görev çubuğu adı, .etc ..) çalıştırmanın bir yolunu arıyorum.

Bunu yapmak için bir program kullanmak istemiyorum, daha temiz bir şey arıyorum. VBScript kullanan bir çözüm buldum , ancak VBS kullanmaktan da hoşlanmıyorum.


Haha! Kesinlikle hayır. Her seferinde bir toplu iş dosyası çalıştıracak bir Windows hizmeti geliştiriyorum.
Moayad Mardini

4
Windows hizmetleri toplu iş dosyaları olarak çalışmaz. Hizmet olarak çalışıyorlar. Soruyu açıklığa kavuşturmanız gerekir - yazıldığı gibi ve yorumlarda bana anlam ifade etmiyor.
CarlF

1
Toplu iş dosyalarını çalıştıran bir Windows hizmeti var. Bu hizmet bir toplu iş dosyası değil.
Moayad Mardini

1
Hizmetini hangi dilde yazıyorsun?
Hugh Allen

orada da hstart var.
barlop

Yanıtlar:


119

1. Çözüm:

Bu bir metin satırını dosya olarak kaydedin invisible.vbs:

CreateObject ("Wscript.Shell"). "" "" & WScript.Arguments (0) & "" "", 0, False komutlarını çalıştırın.

Herhangi bir programı veya toplu iş dosyasını görünmez bir şekilde çalıştırmak için bu şekilde kullanın:

wscript.exe "C: \ Wherever \ invisible.vbs" "C: \ Başka Bir Yer \ MyBatchFile.bat"

Ayrıca bir iletisim listesini iletmek / iletmek için yalnızca iki çift tırnak işareti kullanın.

CreateObject ("Wscript.Shell"). "" & WScript.Arguments (0) & "", 0, False komutlarını çalıştırın.

Örnek: Invisible.vbs "Kill.vbs ME.exe"

2. Çözüm:

Bir işlemi sessizce başlatmak için bir komut satırı aracı kullanın: Sessiz , hidecon veya hideexec .


2
Neden 4 çift tırnak, lütfen açıklar mısın?
Starx

Ya gizli bir program başlatmamız gerekirse?
Starx,

5
@ Starx VB sözdizimi. &birleştirilmiş dizeler anlamına gelir. Dizeler çift tırnak içine alınır ( "). ""Dizge sınırlayıcıları içinde ardışık çift tırnak ( ) bir değişmez çift tırnak ( ") anlamına gelir . Bu nedenle, dört çift tırnak ( """") bir karakterin bir dizgisidir, bir çift alıntı ( ") olacaktır. Birlikte koyun ve """" & WScript.Arguments(0) & """"olacak "<argument>", nereye <argument>komut geçirilen ilk komut satırı argümandır.
Bob

4
Tüm argümanları geçmesi için nasıl değiştirilir? Argümanları alıntı yapmaksızın iletmek daha uygun olur.
Ctrl-C

2
Bu hala wscript.exe "C:\Wherever\invisible.vbs" ...içine koymak için bir toplu iş dosyası oluşturmanızı gerektirmiyor mu?
endolith

26

Toplu iş dosyalarını veya komut dosyalarını veya herhangi bir dosyayı gizlemek için .... IExpress.exeToplu dosyadan bir .exe oluşturmak için yerleşik Windows XP kullanın . Kullanırken IExpressgizli çalıştır seçeneğini işaretleyin ve hiçbir şey göstermemekle ilgili tüm kutuları işaretleyin. .Exe'nizi oluşturduktan sonra, seçtiğiniz komut klasörüne yerleştirin ve onu asla görmeyeceksiniz.


1
Oh, aslında iyi bir çözüm.
Camilo Martin

7
7 gibi yeni Windows sürümlerinde lexpress.exe eşdeğer bir şey var mı?
15:00

@ Sнаđошƒаӽ Windows 7'de .... sadece test edildi
DarthRubik

@DarthRubik Bunu paylaştığınız için teşekkür ederiz. Ben de test ettim ve gayet iyi çalışıyor. Cevabı yükseltmenin zamanı geldi. :)
Sнаđошƒаӽ

Bu "Command.com" artık görünmüyor çünkü Windows 10 64 üzerinde çalışmıyor gibi görünüyor
Arne S

10

Cmdow kullanmak , pencerelerin listelenmesini, taşınmasını, yeniden boyutlandırılmasını, yeniden adlandırılmasını, gizlenmesini / gizlenmesini, devre dışı bırakılmasını / etkinleştirilmesini, küçültülmesini, yeniden boyutlandırılmasını, geri yüklenmesini, etkinleştirilmesini / etkinleştirilmemesini, kapatılmasının, öldürülmesini ve kapatılmasını sağlayan NT4 / 2000 / XP / 2003 için bir Win32 komut satırı aracıdır. Daha.

Parametreleri geçen gizli bir toplu iş dosyası çalıştırın: -

cmdow / çalıştır / sakla mybat arg1 "arg 2"


Ama bu komutu nasıl yönetebilirim?
Moayad Mardini

9
cmdow, çoğu virüsten koruma ürününde kötü amaçlı yazılım olarak algılandı. Bu nedenle, bu çözümü PC'nizden başka yerlerde kullanmak zor olacaktır.
Ganesh R.

@ Ganesh: Daha iyi bir çözüm?
Moayad Mardini

Açık kaynak mı? Açık kaynak olmayan ve harrymc'in 1 satırlı vbscript komutunu çalıştırarak aynı şeyi yapabileceğiniz zaman trojanları paketleyen üçüncü taraf bir uygulamayı kullanmanın bir anlamı yoktur (konunun cevabına bakınız).
thebunnyrules

1
Açık kaynak, bu yüzden harika. Burada kaynak kodunu alabilirim: github.com/ritchielawrence/cmdow
thebunnyrules 16:17

9

Toplu İş Dosyanız tek bir satıra sığabilecekse, rasgele bir dizine yerleştirilmiş bir klasörün içine sağ tıklayarak bir Kısayol kullanın ve sihirbazın geri kalanını atlayın ve son olarak da oluşturduğunuz kısayolu sağ tıklayın. özellikleri tıklatın ve hedefin altında, genellikle bir yarasa dosyasına koyacağınızı girin. Ve dayını Bobs!

Artıları:

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

Eksileri:

 Limited to one line, so many characters

Tek sorun, bir dosya türünü bir kısayolla ilişkilendirememenizdir. Yani bir toplu iş betiği ile Explorer'da çift tıklayarak açmak istiyorsanız, hala bir .bat dosyasına ihtiyacınız var.
Björn Lindqvist

Hala Bob Amca'yı bulmaya çalışıyorum, buralarda bir yerde!
Pezevenk Suyu BT,

7

Komut dosyasını etkileşimli yapmadan bir işyerinde çalıştırın:

at 11:00 script.bat

Başka bir çözüm, Python gibi bir şeyi kurmakta sakınca yoksa, sadece bir komut dosyası oluşturabilir ve onu çalıştırabilirsiniz pythonw(GUI işlemleri için bağlantılı sürüm). Herhangi bir grafiksel API kullanmadığınız için, pencere görünmeyecektir. Basitçe çağrıları kullanın os.system()ve dizeleri komut satırına yazmakla aynı olduğu gibi toplu betiği taklit eder.

Örnek:

import os

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

3
Ama bu komutu nasıl yönetebilirim?
Moayad Mardini

Zamanlanmış bir görevi zamanlamanız veya bir servis yazmanız gerekir.
Unfundednut

örnekler eklendi.
John T

6

Kolayca küçültülmüş çalıştırabilirsiniz.

start /MIN batch.cmd

3
veya yerine / B kullanın!
rani

6

Windows7'yi kullanarak, arka planda görünmeyen bir şekilde belirtilen izinlerle ve hatta "SYSTEM" hesabı olarak çalışacak bir toplu iş dosyası planlamak için "Zamanlanmış Görev" kontrol panelini kullanabilirsiniz. Aşağıdaki ekran görüntüsüne bakın:

görüntü tanımını buraya girin

Ayrıca, pek fazla yetenek bulunmamasına rağmen, '/ interactive' seçeneği olmayan "AT.exe" komutunu kullanarak komut satırından görünmez bir toplu iş komut dosyası görevi de oluşturabilirsiniz.


3
Gizli onay kutusu, Görev Zamanlayıcısı kullanıcı arabiriminden gelen görevi gizler (
Sourav Ghosh

Bir görevi “SİSTEM” ayrıcalıklarına ihtiyaç duymadığında (ve güvenlik zayıflıkları için incelenmemiş ve sertleştirilmemiş) kötü bir fikir olarak “SİSTEM” olarak kullanmak; bkz burada yorum .
Scott

6

VBScript çözümünü sevmiyorum.

İndirin ve kopyalamak nircmd.exe sizin için %systemroot%\system32klasöre, ardından serinin ilk satırına bu komutu ekleyin:

nircmd.exe win hide ititle "cmd.exe"

veya titletüm cmdpencereleri gizlemekten kaçınmak için ilk önce toplu iş başlığınızı özel hale getirin :

title MyBatch
nircmd.exe win hide ititle "MyBatch"

Bu kesin yöntemi kullanıyorum, ancak bir süredir nircmd'nin cmd penceresini gizlemediğini, görev çubuğuna küçültüldüğünü ve üzerine tıklayarak geri yüklenemediğini öğrendim. Nedenini bilmiyorum ...
James Yang,


3

Ayrıca bir AutoHotkey betiği de oluşturabilirsiniz :

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

3

YET BİR başka yol, C / C ++ 'dan, CreateProcess işlevini CREATE_NO_WINDOW bayrağıyla kullanmaktır. Burada gösterilmeyen çok fazla gücü var. Bu, yalnızca sistem () veya _spawn () ailesini değiştirmeniz için gereken minimum miktardır.

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 yaklaşımı için doğru cevap. İşte cevabınıza ek olarak kaynak kodu ve uygulama .
Alex,

3

Mükemmel Bat To Exe Converter , dosya .batveya .cmddosyayı bir .exedosyaya dönüştürür .

Basit bir kullanıcı arayüzü var. “Görünmez uygulama” seçeneğini seçerek bir konsol penceresinin bulunmamasını seçebilirsiniz. Ayrıca, bir simge atamanıza, ilişkili dosyaları paketlemenize ve diğer birçok seçeneğe sahip olmanıza olanak tanır.

İşte ana arayüz penceresinin ekran görüntüsü:


Bu resmin güncel olmadığını unutmayın. 2.4.8 versiyonunu gösterir ve Eylül 2018 itibariyle, web sitesi 3.0.10.0 versiyonunu sunar (en son 2018-03-23 ​​güncellendi).

Uyarı: www.f2ko.de web sitesi coinhive.com, yaygın olarak kötü amaçlı yazılım olarak tanımlanan web sitesine bağlanır .


2

Bu şekilde nircmd ile başarılı bir şekilde yaptım :

  1. nircmd.exe dosyasını linkten indir
  2. .bat dosyanızı oluşturun
  3. .bat dosyasının ilk satırı şöyle olmalı: nircmd.exe win hide ititle "cmd.exe"
  4. her iki dosyayı da seçin ve winrar kullanarak kendiliğinden açılan bir dosya oluşturun
  5. "general" sekmesinde "autoextract dosyası oluştur" kutusunu işaretleyin
  6. "advance" sekmesinde "autoextract" düğmesini seçin
  7. yeni bir pencere var ve "mode" sekmesini seçip ardından seçeneği seçin: "her şeyi gizle"
  8. "güncelleme" sekmesini seçin ve "mevcut dosyaların üzerine yaz" seçeneğini seçin
  9. "Genel" sekmesini seçin ve isterseniz çıkartma için bir hedef klasör tanımlayın ve "Çıkartma işleminden sonra çıkar" kutusuna .bat'ın çıkarılacağı tam yolu yazın. Örn: çıkartma klasörünü: "c: \ windows \" olarak tanımlarsanız, çıkartma işleminden sonra çıkılacak tam yol: "c: \ windows \ file.bat" (.bat adınız durumunda: file.bat) )
  10. tüm pencerelerde kabul et düğmesini tıklayın

Şimdi üzerine tıklayıp kurduktan sonra .bat dosyanızın tamamen gizli çalışacağı bir .exe dosyasına sahip olacaksınız.


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

3
Lütfen komutun kısa bir açıklamasını ekleyin. Bu, OP'nin (ve diğerlerinin) sadece komutu kopyalamak ve kullanmak yerine nasıl çalıştığını anlamasına yardımcı olabilir.
BloodPhilia


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

1

Özel bir işlem yapmanıza gerek yok.

Toplu iş dosyalarını bir Windows hizmetinden çalıştırıyorsanız, hizmette "Hizmetin masaüstüyle etkileşimine izin ver" seçeneğini etkinleştirmediyseniz varsayılan olarak gizlenmeleri gerekir.


1

Diğerinden burada cevabımı ekleme sonrası o tekrarı olan ve bu yüzden şimdi gizli bir toplu iş dosyasını çalıştırmak nasıl 17 farklı yanıtlar vardır burada bu çözüm görmüyorum çünkü. Bu gönderiye olan cevabımı yakın gelecekte bir noktada sileceğim.

Toplu iş mantığı ile toplu komut dosyası oluşturun ve komutları ve sonra yeni bir dosya oluşturmak .VBSuzantısı kullanmak aşağıda mantığı (örnek aşağıda verilmiştir) ve sadece tam yoluna fişi .CMDveya .BATdosyasını PING -t <IPAddress>vb böylece komutları toplu işlemi, çalıştırıldığında komut penceresini göstermeyecek şekilde gizli bir şekilde yürütür.

Aşağıdaki örnekte yer alan mantık, C:\Folder\BatchFileName.cmdkomut dizilerinizle birlikte toplu komut dosyasına işaret edecek şekilde değişikliği belirtiyorsa, şimdi manuel olarak çalıştırın.

Dosyayı kaydedin ve ihtiyaçlarınız için belirsiz bir zamanlamayı çalıştırmak için Windows7'de bir görev zamanlama Problemleri.VBS ile zamanlayın.Task Scheduler

Aksi takdirde, toplu iş dosyasına koyduğunuz .VBSsonsuz PINGkomutu çalıştırmak için dosyayı gerektiği gibi işaretleyin.

NOT: Bu senaryo mantığını aldığım yerin bu olduğuna inanıyorum, ancak bir toplu iş dosyası çalıştırıldığında komut penceresinin gizlendiğinden emin olmak için burada ihtiyacınız olan aynı amaç için güvenilir bir şekilde çalışıyor Sunucu Arıza Kaynağı

ÖRNEK VBS SCRIPT ÇALIŞMA KOMUTANLIĞI HATTI BATCH HIDING CMD PENCERE

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

1

Burada , harici araçlar içermeyen toplu işlemlerle gizli bir işlem başlatmak için bildiğim tüm yolları derledim. Komut dosyalarını kullanmaya hazır (bazıları seçenekler bakımından oldukça zengin) ve bunların tümü komut satırını oluşturur. PID döndürülür. Kullanılan araçlar IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process ve JScript.Net'tir.


1

Buna cevap vermiş olmama rağmen, işte başka bir yaklaşım. Burada farklı olan, toplu komut dosyasının çalıştırma sırasında kendini gizleyebilmesidir. Ancak iki ek komut dosyasına ihtiyacınız olacaktır - windowMode.bat ve getCMDPid.bat (her ikisi de .netkod içerir). İşte o zaman nasıl kullanılabilir:

@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

Ben de aynı problemi yaşadım ama çözdüm:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)


0

Bunu anlamaya çalışıyorum ve gerçekten başarılı olamadım. Bu benim sahip olduğum kadar yakındı:

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

0

Explorer içerik menüsünden çağrılan bir toplu iş dosyası için pencereyi gizlemem gerekiyordu ve ayrıca parametreye tırnak eklemem gerekiyordu. Cevapların hiçbiri benim için çalıştı, bu yüzden kendi çözüm ekliyorum.

Bir kaşif içerik menüsü için "command" kayıt defterinde bu vardı:

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

Yani bunun yerine böyle bir vbs oluşturmak zorunda kaldı:

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

Gibi bir yerde kaydedin C:\mypath\myscript.vbsve kayıt defterinde böyle çağırır:

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

.Bat yolunda boşluk bulunmadığını unutmayın, bu nedenle 8.3 dosya adıyla değiştirin. Mesela C:\Program Files\myprogram.batreferans olarak alınmalı C:\Progra~1\myprogram.bat. 8.3 dosya adını kullanmak içindir /x


0

RunApp'ı böyle bir iş yapmak için yarattım ve aynı zamanda prodüksiyonumda kullanıyordum, umarım yardımcı olur.

Aşağıdaki gibi config:

file: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

Ve runapp.exeyerine fırlat .


-1

Bu, Windows 8 için çalışıyor (muhtemelen diğerleri)

  1. Normal olarak bir toplu iş dosyası oluşturun
  2. Toplu iş dosyasına bir kısayol oluşturma
  3. Kısayol> özellikler üzerine sağ tıklayın
  4. Düzeni tıklayın
  5. "Sistem konumu penceresi gösterilsin"
  6. sola pozisyonunu ayarlayın tp -1000
  7. tıkla uygula

  8. Kısayola tıkladığınızda çalışacaktır ancak görmeyeceksiniz :)


4
Gerçekten mi? Bu görev çubuğunda bir düğme olarak gösterilmez?
Scott,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.