विंडो के बिना किसी निर्धारित कार्य में .bat फ़ाइल चलाएँ


143

मेरे पास एक निर्धारित कार्य है जो एक बैच स्क्रिप्ट शुरू करता है जो robocopyहर घंटे चलता है। हर बार यह डेस्कटॉप पर रोबोकॉपी के आउटपुट के साथ एक विंडो पॉप अप चलाता है, जिसे मैं वास्तव में नहीं देखना चाहता।

मैं निर्धारित काम चलाने के लिए खिड़की को छोटा दिखाने में कामयाब रहा

cmd /c start /min mybat.bat

लेकिन यह मुझे हर घंटे एक नई कमांड विंडो देता है। मैं इस बात से आश्चर्यचकित था, cmd /c"स्ट्रिंग द्वारा निर्दिष्ट कमांड को वहन करता है और फिर समाप्त करता है" - मुझे डॉक्स को गलत समझ लेना चाहिए।

वहाँ एक बैच स्क्रिप्ट चलाने के लिए एक तरीका है बिना यह एक cmd खिड़की popping?


मुझे यह एक अधिक पसंद करने योग्य उत्तर stackoverflow.com/questions/6568736/…
Efekt

जवाबों:


144

आप इसके बजाय Windows स्क्रिप्ट फ़ाइल का उपयोग करके चुपचाप चला सकते हैं। रन विधि आपको अदृश्य मोड में स्क्रिप्ट चलाने की अनुमति देती है। .vbsइस तरह एक फ़ाइल बनाएँ

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

और इसे शेड्यूल करें। इस उदाहरण में दूसरा तर्क विंडो शैली सेट करता है। 0 का अर्थ है "खिड़की छिपाएं।"

रन विधि का पूरा सिंटैक्स :

 object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

तर्क:

  • ऑब्जेक्ट: WshShell ऑब्जेक्ट।
  • strCommand: स्ट्रिंग मान उस कमांड लाइन को दर्शाता है जिसे आप चलाना चाहते हैं। आपको निष्पादन योग्य फ़ाइल में पास होने के लिए कोई भी पैरामीटर शामिल करना होगा।
  • intWindowStyle: वैकल्पिक। कार्यक्रम की खिड़की की उपस्थिति का संकेत इंटर्गर मूल्य। ध्यान दें कि सभी प्रोग्राम इस जानकारी का उपयोग नहीं करते हैं।
  • bWaitOnReturn: वैकल्पिक। बूलियन मूल्य यह दर्शाता है कि स्क्रिप्ट को आपकी स्क्रिप्ट में अगले कथन को जारी रखने से पहले प्रोग्राम को निष्पादित करने के लिए इंतजार करना चाहिए या नहीं। यदि सही पर सेट किया जाता है, तो प्रोग्राम के पूरा होने तक स्क्रिप्ट एक्जीक्यूशन रुक जाता है, और रन रिटर्न प्रोग्राम के द्वारा लौटाया गया कोई भी त्रुटि कोड देता है। यदि गलत (डिफ़ॉल्ट) पर सेट किया जाता है, तो रन विधि प्रोग्राम शुरू करने के तुरंत बाद वापस आती है, स्वचालित रूप से 0 लौटती है (त्रुटि के रूप में व्याख्या नहीं की जानी चाहिए)।

+1, बस एक ही बात लिखी
सैम कोगन

इसे हटाने से पहले मैंने इसे देखा था। मुझे लगता है कि हम दोनों बॉट हैं। ;-)
splattne

1
उपयोगकर्ता नाम, मुझे ईमानदारी से लगता है कि सैम मेरे से बहुत अधिक हकदार है। लेकिन फिर भी धन्यवाद! और एक ही वाक्य में मुझे और जॉन स्कीट का उल्लेख न करें। वह निन्दा है! ;-)
splattne

3
इस सवाल के लिए "क्या कोई स्क्रिप्ट लिखने का एक तरीका है, इसके बिना एक cmd विंडो को पॉप अप करने के लिए?", यह एक बहुत ही सीधा जवाब देता है: इसे एक विंडोज स्क्रिप्ट फ़ाइल का उपयोग करके चलाएं।
मार्क मेउर

2
@ मुझे लगता है कि यदि आपके पथ में रिक्त स्थान हैं, तो दोहरे उद्धरण आवश्यक हैं।
splattne

58

क्या आप इसे एक निर्धारित कार्य के रूप में चला रहे हैं? यदि ऐसा है तो इसे एक अलग उपयोगकर्ता खाते के रूप में चलाने के लिए सेट करें, फिर यह उपयोगकर्ता के लॉग पर दिखाई नहीं देगा। यदि स्क्रिप्ट को उन वस्तुओं तक नेटवर्क पहुंच की आवश्यकता नहीं है, जिनकी आवश्यकता विंडोज़ ऑथर (जैसे फ़ाइल शेयर या प्रिंटर) है, तो आप इसे "एनटी अथॉरिटी \ सिस्टम" के रूप में चला सकते हैं और पासवर्ड को खाली छोड़ सकते हैं। विंडोज 7 पर, बस उपयोगकर्ता को सिस्टम पर सेट करें, और ओके दबाएं।

(आपको संभवतः एक वास्तविक उपयोगकर्ता का उपयोग करना होगा, यदि आप रोबोकॉपी का उपयोग कर रहे हैं ...)

जे आर


3
धन्यवाद - .vbs विकल्प की तुलना में यह मेरे लिए कम परेशानी वाला था।
मैकेनिअर

8
मैंने सिस्टम के लिए "रन के रूप में" उपयोगकर्ता को सेट किया (जो बाद में इसे बदलकर ओ एनटी AUTHORITY \ SYSTEM) कर दिया और इसने मेरे लिए काम किया। जब मेरा निर्धारित कार्य चलता है तो मैं पॉपअप CMD विंडो नहीं देखता। धन्यवाद!
रयान स्टिल

1
+1, यह सुरुचिपूर्ण है। उपयोगकर्ता नाम के रूप में "सिस्टम" दर्ज करना सुनिश्चित करें, फिर win7 आपके लिए बाकी काम करता है। ध्यान दें कि आपको इंटरनेट तक नेटवर्क पहुंच प्राप्त है, न कि केवल नेटवर्क शेयरों और उन चीजों के लिए जो विंडोज़ की आवश्यकता है।
संस्मिथ

1
सिस्टम उपयोगकर्ता सरल और सुरुचिपूर्ण, महान टीआईपी है! +1!
मट्टियो कोंटा

1
Least-Privilege प्रशासनिक मॉडल को लागू करते हुए देखें । क्या इसके लिए सिस्टम खाते का उपयोग कम-से-कम विशेषाधिकार नीतियों का उल्लंघन है? यदि हां, तो प्रशासकों को पता होना चाहिए कि ज्यादातर स्थितियों में ऐसा नहीं करना चाहिए ।
user34660

29

बस शेड्यूल्ड टास्क को "रन करें कि उपयोगकर्ता लॉग ऑन है या नहीं" के रूप में कॉन्फ़िगर करें।


6
उत्तम! आप क्रेडेंशियल स्टोरेज को डिसेबल भी कर सकते हैं और फिर सिस्टम के रन होने से यह अधिक सुरक्षित है!
बिंकी

17

आप CHP (छिपी हुई प्रक्रिया बनाएँ) भी आज़मा सकते हैं , वही करता है जो आप सोचते हैं ...

CHP.EXE mybat.bat

बिना किसी कमांड विंडो के साथ चलता है। उत्तम! उसी लोगों द्वारा CMDOW के रूप में बनाया गया है, लेकिन यह अधिक उपयुक्त है।


पूरी तरह से काम करता है जब आपको लॉग इन यूजर के संदर्भ में कार्य चलाने की आवश्यकता होती है ("ट्रिगर: ऑन यूजर सेशन से कनेक्ट", "रन टास्क जैसे: उपयोगकर्ता")
सर्गेई

1
यह एक निर्मित उपकरण नहीं है
जॉनी राया

9

CMDOW एक ऐसा अटूट उपकरण है जो आपको कमांड लाइन से विंडोज़ की कई, कई चीजों को करने की अनुमति देता है।

सबसे सरल चीजों में से एक वर्तमान विंडो (आमतौर पर बैट फाइल में पहली पंक्ति के रूप में) को छिपाया जाता है:

cmdow @ /hid

या के साथ एक नई छिपी प्रक्रिया शुरू करें

cmdow /run /hid mybat.bat 

4
यह और रॉकेटनेटिक्स दोनों सुझाव में नए टूल डाउनलोड करना शामिल है, जिसका अर्थ है कि विभिन्न लोगों के डेस्कटॉप पर अधिक संगतता। बेक्ड इन, विंडोज़ कमांड्स का उपयोग करना ज्यादा बेहतर है।
IanVaughan

कुछ एंटी-वायरस प्रोग्राम्स द्वारा प्लस सेमीमाडो को "खतरनाक" के रूप में पाया जाता है (यह खतरनाक नहीं है, लेकिन यह पता लगाने से ही कुछ समस्याएँ पैदा हो सकती हैं, अगर सेमीवेडो फ़ाइल को अलग कर दिया जाए ...)।
ओटियल

3
अभी भी पॉपअप कंसोल है, बस बहुत जल्दी फ्लैश होता है।
बाँस

5

स्क्रिप्ट को इनवॉइस करने का प्रयास करें

start /b <command>

1
यह काम नहीं करता है, शेड्यूल्ड टास्क-> स्टेटस स्टेट्स "शुरू नहीं कर सका", इसके साथ थॉट्स: स्टार्ट / b C: \ file.bat: और: start / b "C: \ file.bat": लेकिन: C: \ file.bat: ठीक काम करता है।
IANVaughan

1
क्योंकि startयह कोई प्रोग्राम नहीं है, यह एक कमांड है। आपको cmdप्रोग्राम चलाने के लिए और /c start /b <file>तर्क के रूप में निर्दिष्ट करने की आवश्यकता है । हालांकि, यह अभी भी काम नहीं कर रहा है क्योंकि यह अभी भी cmdस्क्रीन के लिए एक कंसोल विंडो बनाएगा और एक काली खिड़की को फ्लैश करेगा।
सिंटेक

1
@Synetech के साथ भी पुष्टि कर सकते हैं कि यह एक नई विंडो नहीं बनाएगा, लेकिन इसे शुरू करने के लिए आपको अभी भी एक कंसोल विंडो खोलने की आवश्यकता है। यह वास्तव में एक आसान कमांड है, लेकिन इसे अनुसूचित कार्य के साथ अनुरोध के रूप में उपयोग नहीं किया जा सकता है।
JonathanDavidArndt

5

आप बैच फ़ाइल के लिए एक शॉर्टकट बना सकते हैं, शॉर्टकट को शुरू करने के लिए शॉर्टकट (शॉर्टकट के गुणों, 'शॉर्टकट' टैब) में सेट कर सकते हैं, और फिर शॉर्टकट को शुरू करने के लिए नौकरी सेट कर सकते हैं।

महत्वपूर्ण : आपको '.lnk' एक्सटेंशन के साथ पूर्ण रूप से रन टेक्स्ट फ़ील्ड में टाइप करके शॉर्टकट को पथ निर्दिष्ट करना होगा; अगर आप सिर्फ यह करने के लिए ब्राउज़ करने के लिए प्रयास करते हैं, यह होगा काम आते हुए खुद को जो कुछ भी शॉर्टकट अंक ले जाते हैं।


यह विंडोज 10 x64 पर काम नहीं करता है, यह एक पॉपअप देता है "आप इस फाइल को कैसे खोलना चाहते हैं?"
Jan

1

मुझे लगता है कि इस सवाल का जवाब पहले से ही एक अच्छे संकल्प के साथ दिया गया है जो कि विंडोज़ का मूल निवासी है और इस तरह सबसे अधिक संगत होना चाहिए, और मैं पूरी तरह से सहमत हूं।

मैं यह भी कहना चाहता था कि मैं @ splattne की टिप्पणी (लेकिन उसका वास्तविक उत्तर नहीं) से असहमत हूं - कि अन्य संदर्भित थ्रेड में रिज़ॉल्यूशन क्रेडिट का हकदार है। उस उत्तर में स्क्रिप्ट को एक अलग उपयोगकर्ता (सिस्टम) के रूप में चलाना शामिल है, जो स्क्रिप्ट रूट एक्सेस देने के बराबर है। यह नौकरियों के लिए भी असफल हो जाएगा जैसे ROBOCOPY(जॉन रेनी द्वारा संदर्भित), जिसे नेटवर्क एक्सेस की आवश्यकता होती है।

मैंने पहले कभी प्रयास नहीं किया है CMDOW, लेकिन मैं एक और समान प्रस्ताव देना चाहूंगा, जो [हालांकि विंडोज पर मूल रूप से स्थापित नहीं है] अभी भी अधिकांश संस्करणों के लिए अत्यधिक पोर्टेबल है, और 32 और 64-बिट दोनों संस्करणों में आता है, और यह है निर्मम

NirCmd एक बहुत शक्तिशाली उपकरण है जिसमें विकल्पों के असंख्य हैं, जिनमें से सबसे उपयोगी, मैं व्यक्तिगत रूप से निम्नलिखित कमांड को निष्पादित करके छिपी हुई कमांड विंडोज को लॉन्च करने की क्षमता पाता हूं:

c:\path\to\nircmd.exe exec hide "c:\path\to\mybat.bat"

NirCmd कमांड संदर्भ के execअनुभाग से :

exec [show/hide/min/max] [application + command-line]

किसी एप्लिकेशन को चलाता है, और निष्पादित एप्लिकेशन के लिए वैकल्पिक रूप से एक या अधिक कमांड-लाइन पैरामीटर निर्दिष्ट करता है। [शो / छिपाने / मिनट / अधिकतम] पैरामीटर निर्दिष्ट करता है कि क्या चल रहा एप्लिकेशन दिखाई देगा या नहीं। यदि 'छिपाना' निर्दिष्ट है, तो चल रहा एप्लिकेशन उपयोगकर्ता को दिखाई नहीं देगा। यदि 'अधिकतम' निर्दिष्ट है, तो चल रही एप्लिकेशन विंडो अधिकतम हो जाएगी। यदि 'न्यूनतम' निर्दिष्ट किया गया है, तो चल रही एप्लिकेशन विंडो कम से कम हो जाएगी।

संपादित करें: मैं ROBOCOPYनौकरी चलाने की कोशिश कर रहा था और इस उत्तर में विधि की कोशिश कर रहा था , और नेटवर्क एक्सेस विशेषाधिकारों के संपादन के बाद भी यह काम नहीं कर रहा था। मैंने स्क्रिप्ट पर डबल-क्लिक करने की कोशिश की और इसे काम करने के लिए नहीं मिला, लेकिन केवल इसे एक उन्नत कमांड प्रॉम्प्ट के तहत चलाने के लिए मिल सकता है। मैंने बैच फ़ाइल के लिए एक शॉर्टकट बनाया था और इसे प्रशासक के रूप में चलाया था और इसे डबल-क्लिक करके इसे निष्पादित करने में सक्षम था, लेकिन जिस विधि के साथ मैंने समाप्त किया था वह इसे सिस्टम के रूप में छिपाना था (मुझे पता है, मुझे पता है) - लेकिन यह तब तक के लिए काम करता ROBOCOPYहै, जब तक कि यह सही हो, जब तक कि बैच फ़ाइल में सही अनुमति न हो।

संपादित करें 2: किसी कारण से, यह सिस्टम के रूप में काम नहीं करेगा (शायद नेटवर्क एक्सेस चीज़ जिसे पहले संदर्भित किया गया है) - मैंने केवल इस पर ध्यान दिया है कि वास्तव ROBOCOPYमें / एल ध्वज के बिना चल रहा है , जो मूल रूप से सिर्फ एक सिमुलेशन है और [जाहिरा तौर पर] नहीं है। वास्तव में रिमोट सिस्टम से कनेक्ट होता है, लेकिन जब मैं बैच फ़ाइल को उच्चतम विशेषाधिकारों के साथ चलाता हूं और छिपे हुए बॉक्स की जांच करता हूं, और मैं इसे अभी भी कमांड विंडो को दिखाए बिना बैकग्राउंड में उपयोगकर्ता के रूप में चला सकता हूं, जो भी किसी के लिए भी इसके लायक है। ।



-2

अपने बैच फ़ाइल के अंत में एक निकास कमांड में डालने का प्रयास करें। यह स्क्रिप्ट होने पर कमांड विंडो को बंद कर देना चाहिए।


-2

आउटपुट को छिपाने के लिए (हालांकि विंडो नहीं), इसे अपनी बैच फ़ाइल की शुरुआत में जोड़ें:

@echo off
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.