पूरी तरह से छिपे हुए तरीके से एक बैच फ़ाइल चलाएँ


139

मैं एक बैच फ़ाइल (.bat) को चलाने के लिए उपयोगकर्ता (बिना विंडो, कोई टास्कबार नाम, .etc ..) को कुछ भी देख रहा हूँ।

मैं ऐसा करने के लिए कुछ प्रोग्राम का उपयोग नहीं करना चाहता, मैं कुछ क्लीनर की तलाश में हूं। मुझे एक समाधान मिला है जो VBScript का उपयोग करता है, लेकिन मुझे वास्तव में VBS का उपयोग करना पसंद नहीं है।


Haha! निश्चित रूप से नहीं। मैं एक विंडोज सेवा विकसित कर रहा हूं, जो हर बार बैच फ़ाइल चलाएगी।
मोयद मर्दिनी

4
Windows सेवाएँ बैच फ़ाइलों के रूप में नहीं चलती हैं। वे सेवाओं के रूप में चलाते हैं। आपको प्रश्न को स्पष्ट करने की आवश्यकता है - जैसा कि लिखा गया है और टिप्पणियों के साथ यह मेरे लिए कोई मतलब नहीं है।
CarlF

1
मेरे पास एक Windows सेवा है जो बैच फ़ाइलों को चलाती है। ऐसा नहीं है कि सेवा एक बैच फ़ाइल है।
मय्यद मर्दिनी

1
आप अपनी सेवा किस भाषा में लिख रहे हैं?
ह्यूग एलन

वहाँ भी hstart है।
बार्लोप

जवाबों:


119

समाधान 1:

फ़ाइल के रूप में पाठ की इस एक पंक्ति को सहेजें invisible.vbs:

CreateObject ("Wscript.Shell")। "" "& WScript.Arguments (0) और" "", 0, गलत चलाएँ।

किसी भी प्रोग्राम या बैच फ़ाइल को अदृश्य रूप से चलाने के लिए, इसे इस तरह उपयोग करें:

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

पास-ऑन / रिले करने में सक्षम होने के लिए तर्कों की एक सूची केवल दो दोहरे उद्धरण चिह्नों का उपयोग करती है

CreateObject ("Wscript.Shell")। "" & WScript.Arguments (0) और "", 0, गलत चलाएँ।

उदाहरण: Invisible.vbs "Kill.vbs ME.exe"

समाधान 2:

चुपचाप एक प्रक्रिया शुरू करने के लिए कमांड लाइन टूल का उपयोग करें: शांत , हिडकोन या हिडेनसेक


2
4 दोहरे उद्धरण क्यों, आप समझा सकते हैं?
Starx

क्या होगा यदि हमें छिपे हुए कार्यक्रम को शुरू करने की आवश्यकता है?
स्टारक्स

5
@Starx VB सिंटैक्स। &का अर्थ है समवर्ती तार। स्ट्रिंग्स डबल कोट्स ( ") में संलग्न हैं । ""स्ट्रिंग सीमांकक के अंदर लगातार दोहरे उद्धरण ( ) का अर्थ शाब्दिक दोहरा उद्धरण ( ") है। तो, चार दोहरे उद्धरण ( """") एक वर्ण के एक स्ट्रिंग शाब्दिक होंगे, एक दोहरे उद्धरण ( ")। इसे एक साथ रखो, और """" & WScript.Arguments(0) & """"बन जाएगा "<argument>", जहां <argument>स्क्रिप्ट के लिए पहली कमांड लाइन तर्क पारित किया गया है।
बॉब

4
इसे संशोधित कैसे करें ताकि यह सभी तर्कों को पारित करे? उन्हें उद्धृत किए बिना तर्कों को पारित करना अधिक सुविधाजनक होगा।
Ctrl-C

2
क्या यह अभी भी आप के wscript.exe "C:\Wherever\invisible.vbs" ...अंदर डालने के लिए एक बैच फ़ाइल बनाने की आवश्यकता नहीं है?
एंडोलिथ जूथ

26

बैच फ़ाइलों या कमांड फ़ाइलों या किसी भी फ़ाइलों को छिपाने के लिए .... IExpress.exeबैच फ़ाइल से एक .EXE बनाने के लिए उपयोगिता में निर्मित Windows XP का उपयोग करें । उपयोग करते समय IExpressसुनिश्चित करें कि आप रन हिडन विकल्प की जाँच करें और कुछ भी नहीं दिखाने के बारे में सभी बक्से को चिह्नित करें। आपके द्वारा अपना .exe बनाने के बाद आप जो भी रन कमांड फोल्डर चुनते हैं उसमें रखें और आप कभी भी इसे ऊपर आते हुए नहीं देखेंगे।


1
ओह, अच्छा समाधान वास्तव में।
कैमिलो मार्टिन

7
वहाँ 7 विंडोज की तरह नए विंडोज़ संस्करणों में lexpress.exe के बराबर कुछ है?
Sain:00ош Sаӽ

@ Sain windowsошƒаӽ यह विंडोज़ 7 में है .... अभी इसे परीक्षण किया है
डार्थरुबिक

@DarthRubik साझा करने के लिए धन्यवाद। मैंने भी इसका परीक्षण किया और यह ठीक काम करता है। उत्तर को उभारने का समय। :)
मई

यह विंडोज 10 64 पर काम नहीं करता है क्योंकि "कॉमपीसस" अब मौजूद नहीं है
Arne S

10

CmVA का उपयोग NT4 / 2000 / XP / 2003 के लिए एक Win32 कमांडलाइन उपयोगिता है जो विंडोज़ को सूचीबद्ध करने, स्थानांतरित करने, पुनः आकार देने, नाम बदलने, छुपी / अप्रयुक्त, अक्षम / सक्षम, कम से कम, अधिकतम, पुनर्स्थापित, सक्रिय / निष्क्रिय, बंद, मारी गई और सूचीबद्ध करने की अनुमति देता है। अधिक।

एक बैच फ़ाइल छिपाएँ जो इसे पारित करती है: -

cmdow / रन / हिड माइबेट arg1 "arg 2"


लेकिन मैं यह कमांड कैसे चलाऊंगा?
मोय्यद मर्दिनी

9
cmando को अधिकांश एंटीवायरस उत्पादों द्वारा मैलवेयर के रूप में जाना जाता है। इसलिए अपने पीसी के अलावा अन्य स्थानों पर इस समाधान का उपयोग करना मुश्किल होगा।
गणेश आर।

@ गणेश: कोई बेहतर उपाय?
मोयद मर्दिनी

क्या यह खुला स्रोत है? थर्ड पार्टी ऐप का उपयोग करने का कोई मतलब नहीं है जो ओपन सोर्स नहीं है और ट्रोजन को पैक किया जा सकता है जब आप एक ही काम कर सकते हैं साथ ही हैमरमीक की 1 लाइन vbscript चल रही है (देखें वह थ्रेड के शीर्ष पर उत्तर देता है)।
thebunnyrules 13:16

1
खैर, यह खुला स्रोत है, इसलिए यह बहुत बढ़िया है। स्रोत कोड यहाँ प्राप्त कर सकते हैं: github.com/ritchielawrence/cmdow
thebunnyrules

9

यदि आपकी बैच फ़ाइल एक पंक्ति और इतने सारे वर्णों में फिट हो सकती है, तो बस एक यादृच्छिक निर्देशिका में डाले गए फ़ोल्डर के अंदर राइट क्लिक करके एक शॉर्टकट का उपयोग करें, और शेष विज़ार्ड के माध्यम से छोड़ें, और अंतिम रूप से बस बनाए गए शॉर्टकट पर राइट क्लिक करें और गुण क्लिक करें और लक्ष्य के तहत, वह इनपुट जो आप आमतौर पर बैट फाइल में डालते हैं। और बोब्स तेरे अंकल!

पेशेवरों:

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

विपक्ष:

 Limited to one line, so many characters

एकमात्र समस्या यह है कि आप किसी फ़िलाटाइप को शॉर्टकट से नहीं जोड़ सकते हैं। इसलिए यदि आप एक्सप्लोरर में उस पर डबल-क्लिक करके एक बैच स्क्रिप्ट के साथ खोलना चाहते हैं, तो आपको अभी भी एक .bat-file की आवश्यकता है।
ब्योर्न लिंडकविस्ट

मैं अभी भी अंकल बॉब को खोजने की कोशिश कर रहा हूँ, यहाँ कहीं भी है !!
पिंपल का रस आईटी

7

इंटरेक्टिव बनाये बिना स्क्रिप्ट को काम पर चलाएं:

at 11:00 script.bat

एक और उपाय, अगर आपको पायथन जैसी किसी चीज़ को स्थापित करने में कोई आपत्ति नहीं है, तो आप बस एक स्क्रिप्ट बना सकते हैं और इसे pythonw(GUI संचालन के लिए लिंक किया गया संस्करण) चला सकते हैं। चूंकि आप किसी भी ग्राफिकल एपीआई का उपयोग नहीं कर रहे हैं, तो विंडो नहीं दिखाई देगी। बस कॉल का उपयोग करें os.system()और यह एक बैच स्क्रिप्ट की नकल करेगा, क्योंकि यह कमांड लाइन में तार टाइप करने के समान है।

उदाहरण:

import os

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

3
लेकिन मैं यह कमांड कैसे चलाऊंगा?
मोयद मर्दिनी

आपको या तो एक निर्धारित कार्य निर्धारित करना होगा या एक सेवा लिखना होगा।
अनफंडनटेड

उदाहरण जोड़े गए।
जॉन टी


6

Windows7 का उपयोग करके, आप निर्दिष्ट अनुमतियों और यहां तक ​​कि "सिस्टम" खाते के रूप में पृष्ठभूमि में चलाने के लिए एक बैच फ़ाइल को शेड्यूल करने के लिए "शेड्यूल्ड टास्क" कंट्रोल पैनल का उपयोग कर सकते हैं। नीचे स्क्रीनशॉट देखें:

यहां छवि विवरण दर्ज करें

इसके अलावा, यद्यपि कई क्षमताओं के साथ नहीं, आप "AT.exe" कमांड का उपयोग कर '/ इंटरैक्टिव' विकल्प के बिना कमांड लाइन से इस तरह एक अदृश्य बैच स्क्रिप्ट कार्य बना सकते हैं।


3
हिडन चेकबॉक्स टास्क शेड्यूलर यूजर इंटरफेस से काम को छुपाता है (
सौरव घोष

एक कार्य को "सिस्टम" के रूप में चलाना जब इसे "सिस्टम" विशेषाधिकारों की आवश्यकता नहीं होती है (और सुरक्षा कमजोरियों के लिए जांच नहीं की गई है, और एक बुरे विचार के रूप में कठोर); टिप्पणियाँ यहाँ देखें ।
स्कॉट

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

लगता है कि किसी ने 'चुप' चलाने के लिए 7-8 तरीकों की एक सूची बनाई:

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


5
कृपया उन्हें यहां सूचीबद्ध करें, एक उत्तर पोस्ट न करें जो केवल एक लिंक कहीं और है।
एंडोलिथ

3

आप एक AutoHotkey स्क्रिप्ट भी बना सकते हैं :

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

3

C / C ++ से YET ANOTHER तरीका, CREATE_NO_WINDOW ध्वज के साथ CreateProcess फ़ंक्शन का उपयोग करना है। इसमें बहुत सी अतिरिक्त शक्ति है जो यहां नहीं दिखाई गई है। यह आपको सिस्टम () या _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

इसमें एक साधारण यूआई है। आप "अदृश्य अनुप्रयोग" विकल्प का चयन करके कंसोल विंडो नहीं होने का विकल्प चुन सकते हैं। इसके अलावा, यह आपको एक आइकन, पैकेज से जुड़ी फाइलों और कई अन्य विकल्पों को असाइन करने की अनुमति देता है।

यहाँ मुख्य इंटरफ़ेस विंडो का स्क्रीनशॉट है:


ध्यान दें कि यह चित्र पुराना है। यह संस्करण 2.4.8 दिखाता है, और, सितंबर 2018 तक, वेबसाइट 3.0.10.0 (अंतिम अपडेट 2018-03-23) संस्करण प्रदान करती है।

चेतावनी: www.f2ko.de वेबसाइट लिंक coinhive.com, जिसे व्यापक रूप से मैलवेयर के रूप में पहचाना जाता है


2

मैं इसे सफलतापूर्वक किया था साथ NirCmd इस तरह:

  1. nircmd.exe लिंक से डाउनलोड करें
  2. अपनी .bat फ़ाइल बनाएँ
  3. .bat फ़ाइल की पहली पंक्ति यह होनी चाहिए: nircmd.exe win hide ititle "cmd.exe"
  4. दोनों फ़ाइलों का चयन करें और वाइनर का उपयोग करके एक सेल्फ एक्सट्रैक्ट फाइल बनाएं
  5. "सामान्य" टैब में, "ऑटोटेक्स्ट्रेक्ट फ़ाइल बनाएं" बॉक्स को चेक करें
  6. "अग्रिम" टैब में "ऑटोक्स्ट्रेक्ट" बटन का चयन करें
  7. एक नई विंडो है और "मोड" टैब चुनें और फिर विकल्प चुनें: "सब कुछ छिपाएं"
  8. टैब "अपडेट" चुनें और विकल्प चुनें "मौजूदा फ़ाइलों को अधिलेखित करें"
  9. "सामान्य" टैब का चयन करें और यदि आप चाहें तो निष्कर्षण के लिए एक गंतव्य फ़ोल्डर को परिभाषित करें और "निष्कर्षण के बाद निष्पादित करें" बॉक्स में पूर्ण पथ लिखें जहां आपका .bat निकाला जाएगा। Ex: यदि आप निष्कर्षण फ़ोल्डर को इस रूप में परिभाषित करते हैं: "c: \ windows \" तो निष्कर्षण के बाद बहाने का पूरा रास्ता होगा: "c: \ windows \ file.bat" (मामले में आपका .bat नाम है: file.bat )
  10. सभी विंडो पर स्वीकार पर क्लिक करें

अब आपके पास .exe फ़ाइल होगी कि आप उस पर क्लिक करने और उसे स्थापित करने के बाद, आपकी .bat पूरी तरह से छिपी चलेगी।


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

3
कृपया कमांड का संक्षिप्त विवरण शामिल करें। यह ओपी (और अन्य) को यह समझने में मदद कर सकता है कि यह केवल कमांड को कॉपी करने और इसका उपयोग करने के बजाय कैसे काम करता है।
ब्लडफिलिया


'cmdow' is not recognized as an internal or external command, operable program or batch file.
बेको

1

आपको कोई विशेष करने की आवश्यकता नहीं है।

यदि आप एक विंडोज़ सेवा से बैच फ़ाइलों को चला रहे हैं, तो उन्हें डिफ़ॉल्ट रूप से छिपाया जाना चाहिए जब तक कि आप सेवा पर "डेस्कटॉप के साथ बातचीत करने की अनुमति दें" विकल्प को सक्षम न करें।


1

मेरे जवाब को एक और पोस्ट से यहाँ जोड़ना क्योंकि यह एक डुप्लिकेट था और मुझे यहाँ यह समाधान दिखाई नहीं दे रहा है इसलिए अब 17 अलग-अलग उत्तर हैं कि आप एक बैच फ़ाइल को कैसे छिपा सकते हैं। मैं निकट भविष्य में किसी बिंदु पर उस पोस्ट पर अपना उत्तर हटा दूंगा।

अपने बैच लॉजिक को अपने बैच लॉजिक और कमांड्स के साथ बनाएं, और फिर .VBSएक्सटेंशन के साथ एक नई फाइल बनाएं , नीचे दिए गए लॉजिक का उपयोग करें (उदाहरण मैंने नीचे दिया है) और बस अपने रास्ते में पूरी तरह से प्लग करें .CMDया , आदि के .BATसाथ फाइल PING -t <IPAddress>करें। जब यह निष्पादित होता है तो यह बैच को छिपे हुए तरीके से कमांड विंडो को नहीं दिखाता है।

जहां नीचे दिए गए उदाहरण में तर्क C:\Folder\BatchFileName.cmdबदल जाता है कि बैच स्क्रिप्ट को अपने आदेशों के साथ इंगित करने के लिए जिसे आप मैन्युअल रूप से चला रहे हैं, आदि।

.VBSफ़ाइल को सहेजें और अपनी आवश्यकताओं के लिए अनिश्चित समय पर चलने के लिए Task Scheduler windows7 पर किसी कार्य को शेड्यूल करने में समस्या के साथ इसे शेड्यूल करें।

अन्यथा, जिस .VBSफ़ाइल को PINGआप इसे आवश्यक रूप से इंगित करते हैं, उस बैच फ़ाइल में रखी गई अनंत कमांड को चलाने के लिए फ़ाइल पर डबल-क्लिक करें ।

नोट: मेरा मानना है कि यह वह जगह है जहाँ मैं से इस स्क्रिप्ट तर्क मिल गया है, लेकिन यह एक ही उद्देश्य तुम यहाँ की जरूरत है जो जब एक बैच फ़ाइल चलाया जाता है छिपा हुआ है कमांड विंडो सुनिश्चित करने के लिए है के लिए मज़बूती से काम करता है सर्वर दोष स्रोत

उदाहरण VBS SCRIPT RUN COMMAND LINE BATCH HIDING CMD WINDOW

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.bat और getCMDPid.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


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 बना रहा हूं और अपने उत्पादन env में भी इसका उपयोग कर रहा हूं, आशा है कि यह मदद करेगा।

नीचे जैसा विन्यास:

फ़ाइल: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

और runapp.exeइसके बजाय लॉन्च करें ।


-1

यह विंडोज़ 8 के लिए काम करता है (संभवतः अन्य)

  1. सामान्य रूप से एक बैच फ़ाइल बनाएँ
  2. बैच फ़ाइल के लिए एक शॉर्टकट बनाएँ
  3. शॉर्टकट> गुणों पर राइट क्लिक करें
  4. लेआउट पर क्लिक करें
  5. "सिस्टम स्थिति विंडो को अनटिक करें"
  6. बाएं स्थिति tp -1000 सेट करें
  7. आवेदन पर क्लिक करें

  8. शॉर्टकट पर क्लिक करें और यह चलेगा लेकिन आप इसे नहीं देखेंगे :)


4
वास्तव में? यह टास्कबार पर एक बटन के रूप में दिखाई नहीं देगा?
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.