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


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

मैं नियत नौकरी चलाने के द्वारा खिड़की को कम करने में कामयाब रहा

cmd /c start /min mybat.bat

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

क्या एक सीएमडी विंडो पॉप अप किए बिना बैच स्क्रिप्ट चलाने का कोई तरीका है?


140
2018-05-17 09:00


मूल


मैंने यह एक और अधिक बेहतर जवाब पाया stackoverflow.com/questions/6568736/... - Efekt


जवाब:


आप इसे बजाय विंडोज स्क्रिप्ट फ़ाइल का उपयोग करके चुपचाप चला सकते हैं। रन विधि आपको अदृश्य मोड में एक स्क्रिप्ट चलाने की अनुमति देता है। बनाओ .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 लौटाती है (त्रुटि कोड के रूप में व्याख्या नहीं की जाती है)।

142
2018-05-17 09:08



+1, बस एक ही चीज़ लिखा है - Sam Cogan
मैंने इसे हटाए जाने से पहले इसे देखा। मुझे लगता है कि हम दोनों बॉट हैं। ;-) - splattne
उपयोगकर्ता नाम, मैं ईमानदारी से सोचता हूं कि सैम ने मुझसे ज्यादा कुछ हकदार है। लेकिन वैसे भी धन्यवाद! और एक ही वाक्य में मुझे और जॉन स्कीट का जिक्र मत करो। वह निंदा है! ;-) - splattne
प्रश्न के लिए "क्या एक बैच स्क्रिप्ट चलाने के लिए कोई तरीका है बिना किसी सीएमडी विंडो को पॉप अप करना?", यह एक बहुत सी सीधा जवाब देता है: इसे विंडोज स्क्रिप्ट फ़ाइल का उपयोग करके चलाएं। - Mark Meuer
@ मुझे लगता है कि यदि आपके पथ में रिक्त स्थान हैं तो डबल कोट्स आवश्यक हैं। - splattne


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

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

जे आर


56
2018-05-17 09:13



धन्यवाद - यह .vbs विकल्प की तुलना में मेरे लिए कम परेशानी थी। - mackenir
मैंने "रन के रूप में" उपयोगकर्ता को सिस्टम (जिसे बाद में एनटी प्राधिकरण \ प्रणाली में बदल दिया) सेट किया और यह मेरे लिए काम किया। जब मेरा निर्धारित कार्य चलता है तो मैं अब पॉपअप सीएमडी विंडो नहीं देखता हूं। धन्यवाद! - Ryan Stille
+1, यह सुरुचिपूर्ण है। उपयोगकर्ता नाम के रूप में "सिस्टम" दर्ज करना सुनिश्चित करें, फिर Win7 आपके लिए बाकी करता है। ध्यान दें कि आपको इंटरनेट पर नेटवर्क पहुंच मिलती है, सिर्फ शेयरों को साझा न करें और जिन चीजों को विंडोज ऑथ की आवश्यकता है। - samsmith
सिस्टम उपयोगकर्ता सरल और सुरुचिपूर्ण, महान टीआईपी है! +1! - Matteo Conta
देख कम-विशेषाधिकार प्रशासनिक मॉडल लागू करना। इस के लिए सिस्टम खाते का उपयोग कम-विशेषाधिकार नीतियों का उल्लंघन है? यदि ऐसा है तो प्रशासकों को पता होना चाहिए नहीं ज्यादातर स्थितियों में यह करो। - user34660


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


28
2017-10-04 20:06



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


आप भी कोशिश कर सकते हैं सीएचपी (छिपी प्रक्रिया बनाएं), वही करता है जो आपको लगता है ...

CHP.EXE mybat.bat

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


17
2017-07-20 21:54



लॉग इन उपयोगकर्ता के संदर्भ में कार्य को चलाने की आवश्यकता होने पर पूरी तरह से काम करता है ("ट्रिगर: उपयोगकर्ता सत्र से कनेक्ट करने पर", "कार्य को उपयोगकर्ता के रूप में चलाएं") - Sergei
यह एक निर्मित उपकरण नहीं है - Jonny Leeds


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

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

cmdow @ /hid

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

cmdow /run /hid mybat.bat 

9
2018-05-17 11:30



यह दोनों और रॉकेटमोनियों के सुझाव में नए टूल्स डाउनलोड करना शामिल है, जिसका अर्थ है विभिन्न लोगों के डेस्कटॉप पर अधिक अनुकूलता। विंडोज़ कमांड का उपयोग करके बेक्ड बहुत बेहतर है। - IanVaughan
प्लस cmdow कुछ एंटी-वायरस प्रोग्रामों द्वारा "खतरनाक" के रूप में पहचाना जाता है (यह है नहीं खतरनाक है, लेकिन अगर cmdow फ़ाइल क्वारंटाइन किया गया है तो पता लगाने से कुछ समस्याएं हो सकती हैं ...)। - Otiel
अभी भी पॉपअप कंसोल है, बस बहुत तेज़ फ्लैश करें। - Bamboo


स्क्रिप्ट का आविष्कार करने का प्रयास करें

start /b <command>

5
2018-05-17 14:54



यह काम नहीं करता है, अनुसूचित कार्य-> स्थिति राज्य "प्रारंभ नहीं हो सका", इसके साथ: प्रारंभ / बी सी: \ file.bat: और: प्रारंभ / बी "सी: \ file.bat": लेकिन: सी: \ file.bat: बस ठीक काम करता है। - IanVaughan
इसलिये start एक कार्यक्रम नहीं है, यह एक आदेश है। आपको निर्दिष्ट करने की आवश्यकता है cmd कार्यक्रम चलाने के लिए और /c start /b <file> तर्क के रूप में। हालांकि, यह अभी भी काम नहीं करेगा क्योंकि यह अभी भी एक कंसोल विंडो बनाएगा cmd और स्क्रीन पर एक काला खिड़की फ्लैश। - Synetech
@Synetech के साथ भी पुष्टि कर सकते हैं कि यह एक नई विंडो नहीं बनाएगा, लेकिन इसे शुरू करने के लिए आपको अभी भी एक कंसोल विंडो खोलनी होगी। यह वास्तव में एक आसान आदेश है, लेकिन अनुसूचित कार्य के साथ अनुरोध के रूप में उपयोग नहीं किया जा सकता है। - JonathanDavidArndt


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

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


5
2017-08-11 16:49



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


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

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

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

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

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

वहाँ से exec का संभाग एनआईआरसीएमडी कमांड संदर्भ:

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

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

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

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


1
2018-05-01 03:38





एक और समाधान मैंने उपयोग किया है छिपी शुरुआत


0
2017-07-01 07:38