विंडोज बैच फाइलें: .bat बनाम .cmd?


747

जैसा कि मैं इसे समझता हूं, .batपुराने 16-बिट नामकरण सम्मेलन है, और .cmd32-बिट विंडोज के लिए है, अर्थात, NT से शुरू होता है। लेकिन मुझे हर जगह .bat फाइलें दिखती रहती हैं, और वे प्रत्यय का उपयोग करते हुए बिल्कुल समान काम करती हैं। यह मानते हुए कि मेरे कोड, यह वास्तव में कोई फर्क पड़ता है जो जिस तरह से मैं अपने बैच फ़ाइलों का नाम एनटी से अधिक उम्र कुछ भी पर चलने की जरूरत कभी नहीं होगा, या वहाँ कुछ है पकड़ लिया मुझे का इंतजार कर गलत प्रत्यय का उपयोग करके?


19
बस अब हमारे पास भ्रम की स्थिति को जोड़ने के लिए .ps1 फाइलें भी हैं।
मार्टिन ब्राउन

42
अगर मैं गलत नहीं हूँ .ps1 फाइलें एक विंडोज़ पावर शेल फ़ाइल होनी चाहिए। मुझसे गलती भी हो सकती है।
CMS_95

जवाबों:


454

से इस खबर समूह पोस्टिंग द्वारा मार्क जीबिकोवस्की खुद:

जहाँ तक CMD.EXE का संबंध है .CMD और .BAT के बीच अंतर हैं: एक्सटेंशन सक्षम, पथ / APPEND / PROMPT / SET / ASSOC .CMD फ़ाइलों में त्रुटि की परवाह किए बिना ERRORLEVEL सेट करेगा। .BAT त्रुटियों पर केवल ERRORLEVEL सेट करता है।

दूसरे शब्दों में, यदि ERRORLEVEL को 0 पर सेट किया गया है और फिर आप उन आदेशों में से एक को चलाते हैं, तो परिणामस्वरूप ERRORLEVEL होगा:

  • एक .bat फ़ाइल में इसके गैर-0 मान पर अकेला छोड़ दिया गया
  • .cmd फ़ाइल में 0 पर रीसेट करें।

4
क्या इसका मतलब यह है कि .bat स्क्रिप्ट का उपयोग करने से सफलता पर कोई ERRORLEVEL 0 मान वापस नहीं आएगा? अगर यह सच है, तो मैंने कभी इस पर ध्यान नहीं दिया।
djangofan

31
मुझे लगता है कि इसका मतलब है कि यदि ERRORLEVEL को 0 पर सेट किया गया था, तो आप उन कमांडों में से एक को चलाते हैं, इसे .bat फ़ाइल में अकेला (non-0) छोड़ दिया जाएगा लेकिन .cmd फ़ाइल में 0 पर रीसेट कर दिया जाएगा। लेकिन, विंडोज यह क्या है, यह काफी संभव है कि यह वास्तव में आपको बताने के लिए एक असंगत आवाज का कारण बनता है, सुअर लैटिन में, "यदि आप बहुत परवाह करते हैं तो अपने आप को रीसेट करें"।
मैडिसिनिस्ट

5
मुझे लगता है कि यह कह रहा है कि केवल उन विशिष्ट कमांड अलग-अलग सेट / सेट कार्य नहीं करेंगे। अन्य लोग सामान्य की तरह काम करेंगे
साइकोडाटा

1
मैं अब समझता हूँ। मैंने अपने जिस्ट को अपडेट किया। जाहिरा तौर पर, यह एक set var=..कथन को कॉल करते समय त्रुटि (सेट) नहीं करता है । जो अजीब है, क्योंकि मैंने माना कि यह अपेक्षित व्यवहार था। दोनों के लिए तर्क दिए जा सकते थे। मैं .bat फाइलों के साथ रहूँगा। :-)
थाचवगार्ड

1
नोट - APPEND कमांड को अनिर्धारित DPATH कमांड से बदल दिया गया है, हालांकि DPATH /?अभी भी APPEND के रूप में कमांड को सूचीबद्ध करता है। इसके अलावा, विकी लेख के बाद से ज्यादातर सही किया गया है, सिवाय इसके कि यह डीपीएटीएच को सूचीबद्ध नहीं करता है।
डेबेनहम

417

इस धागे में विभिन्न उत्तरों और उद्धृत संदर्भों से सत्यापित जानकारी का संकलन है:

  1. command.com MS-DOS में पेश किया गया 16-बिट कमांड प्रोसेसर है और इसका उपयोग ऑपरेटिंग सिस्टम की Win9x श्रृंखला में भी किया गया था।
  2. cmd.exeWindows NT में 32-बिट कमांड प्रोसेसर है (64-बिट विंडोज ओएस में भी 64-बिट संस्करण है)। cmd.exeविंडोज 9x का हिस्सा कभी नहीं था। यह OS / 2 संस्करण 1.0 में उत्पन्न हुआ, और OS / 2 संस्करण cmd16-बिट शुरू हुआ (लेकिन फिर भी पूरी तरह से संरक्षित मोड के साथ कमांड प्रोग्राम की तरह था start)। विंडोज एनटी cmdको ओएस / 2 से विरासत में मिला , लेकिन विंडोज एनटी का विन 32 संस्करण 32-बिट से शुरू हुआ। हालाँकि 1992 में OS / 2 32-बिट गया, लेकिन यह cmd16-बिट OS / 2 1.x प्रोग्राम बना रहा।
  3. ComSpecEnv चर परिभाषित करता है जो इस कार्यक्रम के द्वारा शुरू की है .batऔर .cmdलिपियों। (WinNT के साथ शुरू करने के लिए यह चूक cmd.exe)
  4. cmd.exeके साथ संगत है command.com
  5. एक स्क्रिप्ट जिसे विंडोज 9x पर आकस्मिक निष्पादन को रोकने के लिए cmd.exeनामित किया गया .cmdहै। यह फ़ाइल नाम एक्सटेंशन OS / 2 संस्करण 1.0 और 1987 में भी वापस आता है।

यहां उन cmd.exeविशेषताओं की एक सूची दी गई है , जिनका समर्थन नहीं किया गया है command.com:

  • लंबे फ़ाइल नाम (8.3 प्रारूप से अधिक)
  • कमान का इतिहास
  • टैब पूरा करना
  • बच चरित्र: ^(के लिए उपयोग करें \ & | > < ^)
  • निर्देशिका स्टैक: PUSHD/POPD
  • पूर्णांक अंकगणित: SET /A i+=1
  • खोजें / बदलें / सबस्ट्रिंग: SET %varname:expression%
  • कमांड प्रतिस्थापन: FOR /F(पहले अस्तित्व में, बढ़ाया गया है)
  • कार्य: CALL :label

निष्पादन का आदेश:

यदि स्क्रिप्ट के दोनों .bat और .cmd संस्करण (test.bat, test.cmd) एक ही फ़ोल्डर में हैं और आप स्क्रिप्ट को बिना एक्सटेंशन (परीक्षण) के चलाते हैं, तो डिफ़ॉल्ट रूप से स्क्रिप्ट का .bat संस्करण चलेगा, यहां तक ​​कि। 64-बिट विंडोज 7 पर। निष्पादन का क्रम PATHEXT पर्यावरण चर द्वारा नियंत्रित किया जाता है। आदेश देखें जिसमें कमांड प्रॉम्प्ट अधिक विवरण के लिए फ़ाइलों को निष्पादित करता है

संदर्भ:

विकिपीडिया: कमांड शेल की तुलना


4
कई छोटे बिंदुओं: 1) .bat जरूरी नहीं कि कम्पीटिक्स का आह्वान करे - जाहिरा तौर पर जब कम्पीट किया जाता है तो एक जटिल रहस्य होता है; 2) MS-DOS के साथ कमशॉट प्रस्तुत किया गया था; 3) cmd.exe अधिकांश कमोडिक्स स्क्रिप्ट चला सकता है, लेकिन कुछ मामूली कमशॉट चीजें हैं जो cmd में काम नहीं करती हैं।
माइकल बुरु

6
cmd.exe को NT 4.0 के साथ पेश किया गया था, मेरा मानना ​​है कि विंडोज़ 95 नहीं।
फ्लाईस्वाट

1
क्रिस: विकिपीडिया लेख, एस्प का वर्तमान संस्करण देखें। मार्क जीबिकोवस्की द्वारा टिप्पणी पर groups.google.com/group/...
मार्क

2
बस इस मामले के बारे में कुछ जानकारी जोड़ने के लिए: dir filenameवैसे ही है जैसे dir filename.*कि कमपीस में; cmd.exe में वाइल्ड कार्ड आवश्यक है। कमशॉट में rem Create an empty file > empty.txtकाम करता है; cmd.exe में नहीं।
आकिनी

2
इसमें से केवल थोड़ा सा ही ओपी के प्रश्न के लिए प्रासंगिक लगता है, जो कि .bat और .cmd के बीच के अंतर के बारे में है, कमोड और cmd.exe के बीच के अंतर के बारे में नहीं। जैसा कि मैंने इसे पढ़ा है, सवाल एक .bat फ़ाइल और एक .cmd फ़ाइल के बीच अंतर के बारे में है, अन्य सभी चीजें समान हैं।
स्टीवर्ट

85

ये उत्तर थोड़े लंबे हैं और संवादात्मक उपयोग पर केंद्रित हैं। स्क्रिप्टिंग के लिए महत्वपूर्ण अंतर हैं:

  • .cmd गैर-एनटी सिस्टम पर अनजाने निष्पादन को रोकता है।
  • .cmd सफलता के लिए Errorlevel को 0 में बदलने के लिए अंतर्निहित कमांड को सक्षम करता है।

रोमांचक नहीं है, एह?

.cmdफ़ाइलों में सक्षम कई अतिरिक्त सुविधाएँ हुआ करती थीं , जिन्हें कमांड एक्सटेंशन्स कहा जाता है। हालांकि, वे अब दोनों के लिए डिफ़ॉल्ट रूप से सक्षम हैं .batऔर .cmdWindows के तहत फाइलों 2000 और बाद।

नीचे पंक्ति: 2012 और उसके बाद, मैं .cmdविशेष रूप से उपयोग करने की सलाह देता हूं ।


7
IMO, यह मुख्य बिंदु है। आप नई स्क्रिप्ट के लिए एक्सटेंशन के रूप में .cmd का उपयोग करते हैं, जब आप यह सुनिश्चित करना चाहते हैं कि वे पुराने 16-बिट OS पर एक्ससेक्टेड नहीं हैं, या यदि आप सुनिश्चित नहीं हैं कि वे काम करेंगे।
ओलिवर

12
मैं वास्तव में बेकार, विश्वविद्यालय वर्ग की तरह के जवाबों की दीवारों के टन पर संक्षिप्त, व्यावहारिक और स्पष्ट उत्तर की सराहना करता हूं।
तरल कोर

7
मैं विश्वविद्यालय का प्रोफेसर हूं और मैं @Liquid Core से सहमत हूं! संक्षिप्त, व्यावहारिक, स्पष्ट उत्तर हैं कि हम कैसे सीखते हैं (जब हम अभी तक कुछ नहीं जानते हैं)। फिर, किसी तरह, एक बार जब हम इसे समझ लेते हैं, तो हम इसे एक सार और समझ से बाहर तरीके से समझाने का आग्रह करते हैं। अजीब। अच्छा अवलोकन!
यूरेका

24

नहीं - यह मामूली बात नहीं है। NT .bat और .cmd एक्सटेंशन पर दोनों cmd.exe प्रोसेसर के कारण फ़ाइल को ठीक उसी तरह से संसाधित करते हैं।

MS TechNet ( Wintechnet.microsoft.com/en-us/library/cc723564.aspx ) से WinNT- क्लास सिस्टम पर कमोड्स बनाम cmd.exe के बारे में अतिरिक्त रोचक जानकारी :

यह व्यवहार Windows NT की एक बहुत ही सूक्ष्म विशेषता को प्रकट करता है जो बहुत महत्वपूर्ण है। 16-बिट MS-DOS शेल (COMMAND.COM) जो Windows NT के साथ जहाज विशेष रूप से Windows NT के लिए डिज़ाइन किया गया है। जब इस शेल द्वारा निष्पादन के लिए एक कमांड दर्ज किया जाता है, तो यह वास्तव में इसे निष्पादित नहीं करता है। इसके बजाय, यह कमांड टेक्स्ट को पैकेज करता है और इसे निष्पादन के लिए 32-बिट CMD.EXE कमांड शेल में भेजता है। क्योंकि सभी कमांड वास्तव में CMD.EXE (विंडोज एनटी कमांड शेल) द्वारा निष्पादित किए जाते हैं, 16-बिट शेल पूर्ण विंडोज एनटी शेल की सभी सुविधाओं और सुविधाओं को विरासत में मिला है।


5
बात हो सकती है; जैसा कि आपके लिंक टेक्स्ट में उल्लेख है कि अंतर सूक्ष्म हैं।
ग्रिंगो ने

आप कमांड लाइन पर निर्दिष्ट करके डॉस कमांड को निष्पादित करने के लिए कमशॉट्स को बाध्य कर सकते हैं। देखें command /c verबनाम शुरू हो रहा है और शुरू हो रही है।
phd443322

नाम मायने रखता है: लोगों में से बहुत से .bat अतीत से हैं! .Cmd का प्रयोग करें! यह भी विश्वास नहीं किया जा सकता है कि NT आज भी उपयोग किया जाता है ...
hfrmobile

@hfrmobile: जब मैंने 'एनटी' का उल्लेख किया था तो मेरा मतलब था कि मूल रूप से सभी विंडोज संस्करण हैं जो हम एनटी (और 9x नहीं) पर आधारित हैं। तो मूल रूप से NT, Win2k और XP के बाद से डेस्कटॉप या सर्वर के लिए विंडोज के सभी संस्करण। और फ़ाइल का नाम फ़ाइल लिखने वाले व्यक्ति की मानसिकता और कोडिंग शैली में अंतर्दृष्टि दे सकता है, लेकिन जहाँ तक दुभाषिया का कोई अंतर नहीं है।
माइकल बूर

16

पुन: जाहिरा तौर पर जब कमप्रेश को लागू किया जाता है तो यह एक जटिल रहस्य का एक सा है;

कई महीने पहले, एक परियोजना के दौरान, हमें यह पता लगाना था कि कुछ कार्यक्रम जिन्हें हम CMD.EXE के तहत चलाना चाहते थे, वास्तव में COMMAND.COM के तहत चल रहे थे। प्रश्न में "कार्यक्रम" बहुत पुरानी थी। BAT फ़ाइल, जो अभी भी दैनिक चलती है।

हमें पता चला कि COMMAND.COM के तहत चलने वाली बैच फ़ाइल का कारण यह है कि इसे .PIF फ़ाइल (प्राचीन भी) से शुरू किया जा रहा था। चूंकि केवल PIF के माध्यम से उपलब्ध विशेष मेमोरी कॉन्फ़िगरेशन सेटिंग्स अप्रासंगिक हो गई हैं, हमने इसे पारंपरिक डेस्कटॉप शॉर्टकट के साथ बदल दिया।

शॉर्टकट से लॉन्च की गई वही बैच फ़ाइल CMD.EXE में चलती है। जब आप इसके बारे में सोचते हैं, तो यह समझ में आता है। यह पता लगाने के लिए कि हमें इतना लंबा समय लगा, आंशिक रूप से इस तथ्य के कारण था कि हम यह भूल गए थे कि स्टार्टअप समूह में इसकी वस्तु पीआईएफ थी, क्योंकि यह 1998 से उत्पादन में था।


1
ओएस क्या था? XP से पहले कुछ?
phk

14

फिर भी, विंडोज 7 पर, BAT फ़ाइलों में भी यह अंतर होता है: यदि आप कभी भी उसी निर्देशिका में TEST.BAT और TEST.CMD फ़ाइल बनाते हैं, और आप उस निर्देशिका में TEST चलाते हैं, तो यह BAT फ़ाइल चलाएगा।

C:\>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

C:\Temp>echo echo bat > test.bat

C:\Temp>echo echo cmd > test.cmd

C:\Temp>test

C:\Temp>echo bat
bat

C:\Temp>

ऐसा इसलिए होता है क्योंकि test.bat से पहले test.bat वर्णानुक्रम में होता है। विंडोज लालच पूरा करता है।
डेविड

26
@ डेविड: सच नहीं है। यह PATHEXTचर में होता है क्योंकि .BAT एक्सटेंशन को .CMD से पहले रखा जाता है (जैसा कि इस उत्तर में दिखाया गया है)। यदि आप PATHEXT में इस आदेश को संशोधित करते हैं, तो इसके बजाय test.cmd निष्पादित किया जाएगा।
आकिनी

हम्म, मैं उम्मीद कर रहा था कि वे दूसरे क्रम में थे; मुझे लगता है कि MS ने कुछ मौजूदा सॉफ़्टवेयर .CMD फ़ाइलों और .BAT फ़ाइलों को एक ही बेसनेम के साथ खोजा (या मान लिया है), जहाँ .CMD फ़ाइलें निश्चित रूप से (नहीं-अभी तक-शिप) cmd के लिए इनपुट के रूप में अभिप्रेत नहीं थीं। exe, लेकिन किसी भी अन्य चीजों की संख्या हो सकती है: कुछ अन्य शेल के लिए कमांड , एप्लिकेशन द्वारा पढ़ी गई कॉन्फ़िगरेशन स्क्रिप्ट, या एप्लिकेशन बाइनरी के कुछ प्रकार, उदाहरण के लिए। (कम से कम, यह सामान्य तरीके से एमएस की मेरी समझ प्रतीत होता है कि उप-इष्टतम व्यवहार के साथ समाप्त हो गया है।)
सैमबी

यह भी ध्यान देने योग्य है कि वर्तमान निर्देशिका PATHविस्तार की परवाह किए बिना पर्यावरण चर में अन्य निर्देशिकाओं से पहले आती है ।
22

13

चूंकि मूल पोस्ट .bat या .cmd प्रत्यय का उपयोग करने के परिणामों के बारे में थी , जरूरी नहीं कि फ़ाइल के अंदर कमांड ...

.Bat और .cmd के बीच एक अन्य अंतर यह है कि यदि दो फ़ाइल समान फ़ाइल नाम और उन दोनों एक्सटेंशनों के साथ मौजूद हैं, तो:

  • में प्रवेश फ़ाइल नाम या फ़ाइल नाम आदेश पंक्ति पर .bat .bat फ़ाइल चलेंगे

  • .cmd फ़ाइल चलाने के लिए, आपको फ़ाइल नाम .cmd दर्ज करना होगा


2
एह? अगर मैं अपनी डीआईआर में एक cmd फ़ाइल डालता हूं तो मुझे इसे लागू करने के लिए फ़ाइल एक्सटेंशन को निर्दिष्ट करने की आवश्यकता नहीं है। उदाहरण: echo notepad.exe% *> np.cmd तब अगर मैं सिर्फ "np mytextfilename.txt" टाइप करता हूँ तो यह नोटपैड को लाएगा। मुझे इसे लागू करने के लिए "np.cmd" टाइप करने की आवश्यकता नहीं है।
जॉन डेविस

2
@ stimpy77: यह सही है अगर np.cmd केवल उस नाम वाली फ़ाइल है, लेकिन "यदि दो फ़ाइल समान फ़ाइल नाम और उन दोनों एक्सटेंशनों के साथ मौजूद हैं" , तो .cmd एक को निष्पादित करने का एकमात्र तरीका इसके विस्तार सहित है। ..
आकिनी

1
यह किसी भी शेल के लिए अस्पष्टता को हल करने की एक आवश्यकता है, .cmd .bat के बीच तकनीकी अंतर के साथ कुछ नहीं करना है। यह शायद इसलिए है क्योंकि filename.bat फ़ाइल नाम से पहले है। वर्णानुक्रम में।
जॉन डेविस

6
यह वास्तव में PATHEXTपर्यावरण चर पर निर्भर करता है । एक्सटेंशन के क्रम में ऐसा प्रतीत होता है कि कोई एक्सटेंशन निर्दिष्ट नहीं होने पर पूर्वता का क्रम है। यह भी ध्यान देने योग्य है कि फाइलों का विस्तार निर्दिष्ट करने के लिए यह आवश्यक नहीं है कि इसका विस्तार env चर में दिखाई दे।
रिकार्डो ज़ोरियो सेप

8

एक बैच में काम करने वाली हर चीज को एक cmd में काम करना चाहिए; cmd पर्यावरण को नियंत्रित करने के लिए कुछ एक्सटेंशन प्रदान करता है। इसके अलावा, cmd को नए cmd दुभाषिया द्वारा निष्पादित किया जाता है और इस प्रकार तेज होना चाहिए (छोटी फाइलों पर ध्यान देने योग्य नहीं) और stabler NTVDM के तहत बल्ले से चलता है जैसा कि 16bit पर्यावरण का अनुकरण करता है


गति में कोई अंतर नहीं करना चाहिए। .batNT में डॉस के तहत नहीं चलता है। एक VDM केवल तभी शुरू होता है जब किसी प्रोग्राम को इसकी आवश्यकता होती है, और 64 बिट विंडोज में भी समर्थित नहीं है, हालांकि मेरा मानना ​​है कि .bat है।
ग्रिंगो ने

3

.cmd और .bat फ़ाइल निष्पादन भिन्न है क्योंकि .cmd त्रुटि चर में इसे कमांड एक्सटेंशन पर प्रभावित कमांड पर बदल सकते हैं। यह वास्तव में इसके बारे में है।


मोटे ^ के। ^ प्रत्येक के लिए उपयोग की जाने वाली कमांड भाषा में अंतर हैं (.bat फ़ाइलों को एक संगतता संस्करण मिलता है)। इनमें से कुछ को यहाँ से इस लिपि द्वारा चित्रित किया जा सकता है: @echo off&setlocal ENABLEEXTENSIONS call :func&&echo/I'm a cmd||echo/I'm a bat goto :EOF :func md;2>nul set var=1
झाक

4
.Cmd फाइलें हर कमांड में एररलेवल को सेट करती हैं, .bat फाइल्स में कुछ कमांड्स एररलेवल को अपरिवर्तित छोड़ देती हैं, जैसा कि स्वीकृत उत्तर में वर्णित है
jeb

1
BAT को DOS के कमांड दुभाषिए COMMAND.COM के साथ बातचीत करने के लिए बनाया गया था। Microsoft ने अपने नए दुभाषिए में ज्यादातर DOS कमांड्स को CMD नाम दिया। प्रोग्राम फ़ाइल। CMD को CMD.EXE के साथ इंटरफेस करने के लिए बनाया गया था और यह COMMAND.COM के साथ संगतता को तोड़ता है। मुख्य रूप से इस बात के लिए जाना जाता है कि वे कैसे त्रुटि चर को संभालते हैं। बैट का उपयोग करते समय, यह चर केवल एक बार वास्तविक त्रुटि होने पर बदल जाता है और प्रत्येक कमांड सफलतापूर्वक निष्पादित होने पर राज्य में कोई परिवर्तन नहीं होता है। यह सीएमडी के लिए सच नहीं है क्योंकि त्रुटि चर वैसा ही होगा, भले ही कोई त्रुटि न हो।
ज़स्क

3

मेरा मानना ​​है कि यदि आप ComSpec पर्यावरण चर के मान को %SystemRoot%system32\cmd.exe(CMD) में बदलते हैं, तो इससे कोई फर्क नहीं पड़ता कि फाइल एक्सटेंशन है .BATया नहीं .CMD। मुझे यकीन नहीं है, लेकिन यह भी WinXP और इसके बाद के संस्करण के लिए डिफ़ॉल्ट हो सकता है।


1

विषय से थोड़ा हटकर, लेकिन क्या आपने विंडोज स्क्रिप्टिंग होस्ट माना है ? आपको यह अच्छा लग सकता है।


13
उस मामले के लिए, PowerShell, जो WSH / cscript.exe को चित्रित करता है।
जॉन डेविस

3
@ stimpy77 सच है, हालाँकि शक्तियां मुझे बहुत भयानक लगती हैं।
मर्किन

2
मुझे डब्ल्यूएसएच बहुत खराब लगता है। मुझे लगता है कि यह सब इस बात पर निर्भर करता है कि हम "भयानक" के लिए क्या माप रहे हैं। पॉवरशेल में स्टार्टअप का अत्याधिक समय है। इसके बारे में सब कुछ बिल्कुल अद्भुत IMO है।
जॉन डेविस

पीएसएच स्टार्टअप समय को गति देने के लिए फ़ॉर्मेटिंग का बहाना करें, दौड़ने का प्रयास करें: सेट-एलियास ngen @ (dir (join-path $ {env: \ windir} "Microsoft.NET \ फ्रेमवर्क") ngen.exe -recurse | Sort -descending lastwritetime) [0] .fullName [NEW LINE HERE] [appdomain] :: currentdomain.getassemblies () | % {ngen $ _। स्थान}
mjbnz

1
पूरी तरह से विषय।
हैप्पीडॉग

1

विस्तार से कोई फर्क नहीं पड़ता।

COMMAND.COMफ़ाइल बनाम संभालने के बीच मामूली अंतर हैं CMD.EXE


-10

एक अंतर:

.cmd फ़ाइलों को निष्पादित होने से पहले मेमोरी में लोड किया जाता है। .bat फाइलें एक लाइन निष्पादित करती हैं, अगली लाइन पढ़ती हैं, उस लाइन को निष्पादित करती हैं ...

जब आप किसी स्क्रिप्ट फ़ाइल को निष्पादित करते हैं और फिर इसे निष्पादित करने से पहले इसे संपादित करते हैं तो आप इस पर आ सकते हैं। इसके द्वारा बैट फ़ाइलों को गड़बड़ किया जाएगा, लेकिन cmd फाइलें नहीं होंगी।


जैसा कि स्थापित किया गया है, ComSpec env परिवर्तनीय परिभाषित करता है कि कौन सा प्रोग्राम लॉन्च किया गया है, क्या आप अनिवार्य रूप से कह रहे हैं कि command.com एक समय में फ़ाइल को एक पंक्ति में पढ़ता है, जबकि cmd.exe फ़ाइल को मेमोरी में प्री-लोड करता है? क्या आप इस पर एक संदर्भ का हवाला दे सकते हैं?
क्रिस नू

24
यह विस्टा और एक्सपी के लिए गलत है, दोनों फ़ाइल प्रकारों को लाइन द्वारा पढ़ा जाता है। यदि आप .cmd या .bat फ़ाइल को रोकते हैं और उसे संपादित करते हैं, तो नया कोड निष्पादित किया जाएगा
jeb


1
कोई बहस कर सकता है कि क्या यह लाइन से लाइन है, क्योंकि यदि आप कमांड फ़ाइल के बीच में निष्पादन को रोकते हैं और शुरुआत में एक चरित्र जोड़ते हैं, तो पार्सर को फिर से शुरू करने पर एक चरित्र से दूर हो जाएगा, संभवतः आपकी स्क्रिप्ट के बाकी हिस्सों को फेंक देगा।

2
आपको बहस नहीं करनी चाहिए। दोनों को हमेशा लाइन से लाइन पढ़ा जाता है। यदि आपको विश्वास नहीं है तो आप इसका परीक्षण कर सकते हैं। एक बैच फ़ाइल बनाएं, जो echo 1&pauseतब निष्पादित करें। आप देखेंगे 1और Press any key to continue...। जबकि echo 2&pauseबाहरी संपादक के साथ एक नई पंक्ति जोड़ दी गई है । एक की दबाएं। आप देखेंगे 2और Press any key to continue...। तुम भी echo 3&pauseशुरुआत में जोड़ने की कोशिश कर सकते हैं । जब आप एक कुंजी दबाते हैं उसके बाद फिर से देखेंगे 2
वेन्यूमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.