2008-11-04 11 views
5

मैं (Windows XP में, आदेश विस्तार के साथ ही सक्रिय) एक बैच फ़ाइल के लिए समय से पहले ही बंद कर देता है पर this SO question द्वारा), लेकिन अन्य पर यह cmd (कंसोल विंडो बस बंद हो जाता है)बैच एक निम्न पंक्ति के साथ/च आदेश

क्यों?


नोट: XpSP2, उपयोगकर्ता प्रशासनिक ठीक है, कोई 'कमांड प्रोसेसर "HKEY_CURRENT_USER \ Software \ Microsoft \ कमान प्रोसेसर में परिभाषित किया गया है ...

+0

संपादित करने के लिए धन्यवाद, ओली: मैं उस सवाल का 'स्क्रिप्ट' टैग करने के लिए चाहता था, लेकिन इतना टैग पर स्वत: पूर्ण करने के लिए मुझे धोखा दिया;) – VonC

उत्तर

4

मुझे मिल गया: कंप्यूटर एक समान विन्यास है लगता है पहली बार एक अनुभवसिद्ध जवाब:।

for /f %%s in (version.txt) do ... 

काम करता है ठीक, हर कंप्यूटर पर

यह एक फ़ाइल नाम के साथ for /f काम करता है, किसी भी घ के साथ नहीं लगता है os कमांड 'टाइप फ़ाइल नाम' की तरह।

हालांकि, यह सब मेरे ग्राहक के कंप्यूटर के लिए सही नहीं है (कुछ पर, 'प्रकार फ़ाइल नाम' ठीक काम करता है)

आप 15 (आसान है?) अंक चाहते हैं ;-), आप के लिए एक उत्तर छोड़ सकते हैं प्रश्न:
क्यों 'for/f' कभी फ़ाइल नाम से किसी और चीज़ के साथ काम नहीं करता है। और यह सिर्फ डॉस सत्र क्यों बंद कर देता है?


संपादित करें: (!) 3 साल बाद, barlop इसी तरह की स्थिति, सवाल "for /f closes cmd prompt immediately?" में दिए गए विवरण का सामना करना पड़ा। उनका निष्कर्ष था:

COMSPEC जब कर SET + ENTER सूचीबद्ध हो था।
तो, मैंने पर्यावरण चर विंडो खोल दी, और COMSPEC को उपयोगकर्ता या सिस्टम चर के तहत सूचीबद्ध नहीं किया गया था। मैंने इसे सिस्टम वैरिएबल में जोड़ा, कमांड प्रॉम्प्ट शुरू किया, और ऐसा लगता है कि यह ठीक काम करता है।

thread on ss64 forum, Andriy M द्वारा बारपॉप के प्रश्न के उत्तर में, विवरण में शामिल हैं।

"for" पाश में बमबारी बाहर 'dir' पूरा करने के लिए (या जो भी आदेश आप को पूरा करने के लिए कहा है) की आवश्यकता है ComSpec आदेश cmd खिड़की फिर से लोड करने में स्थापित किया जाना।

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\ComSpec= 
%SystemRoot%\system32\cmd.exe 
+0

हो सकता है कि 15 अंक सरसों में कटौती नहीं करता है की पेशकश? :-) ईमानदारी से, मैं आपके द्वारा वर्णित व्यवहार को पुन: उत्पन्न करने में विफल रहा। क्या आप कुछ और विवरण पोस्ट कर सकते हैं? – Tomalak

+0

धन्यवाद, टॉमलाक, उस मुद्दे को देखने के लिए समय निकालने के लिए। बात यह है कि मेरे पास एक लारेडी के बगल में ज्यादा जानकारी नहीं है: एक क्लाइंट के पीसी पर, एक डॉस सत्र पर, मैं "for/f% s ('afilename.txt' टाइप करें) echo% s" और टाइप करें। .. "poof" और अधिक डॉस विंडोज़ ... – VonC

+0

मैं इसे आगे बढ़ाऊंगा, लेकिन अगर मैं पहले से ही देखा गया था तो मैं एसओ समुदाय से जांचना चाहता था। जाहिरा तौर पर नहीं। मैं जो भी निष्कर्ष निकाल सकता हूं उसे पोस्ट करूंगा। – VonC

0

यह है कि फ़ाइल एक विस्तार और एक निर्देशिका जो मौजूद नहीं है की तरह इस प्रकार cmd यह व्यवहार करता है नहीं है?

+0

वास्तव में, फ़ाइल मौजूद है और इसमें एक एक्सटेंशन है (फ़ाइल नाम केवल एक foobar नाम था): "के लिए/f% s में ('afilename.txt' टाइप करें) echo% एस "डॉस विंडोज – VonC

0

यदि आदेश एक्सटेंशन अक्षम हैं, तो आदेश के लिए (सेट) पैरामीटर फ़ाइल होना चाहिए।

यदि कमांड एक्सटेंशन सक्षम हैं, तो आदेश के लिए (सेट) पैरामीटर फ़ाइल, स्ट्रिंग या कमांड हो सकता है।

क्लाइंट के कंप्यूटर पर कमांड एक्सटेंशन अक्षम हैं जहां 'टाइप फ़ाइल नाम' सेट विफल हो जाता है।

कमांड एक्सटेंशन को सक्षम या अक्षम करने पर जानकारी के लिए, "cmd /?" टाइप करें

+0

के तत्काल समापन को ट्रिगर करता है, उन्होंने कमांड एक्सटेंशन सक्रिय किए जाने का उल्लेख किया (लगातार, मुझे लगता है)। – Tomalak

+0

हां, लेकिन क्रेग की टिप्पणी से, मैं फिर से जांच करूंगा। यह सुनिश्चित करने के लिए, क्रेग, क्या आप तथ्य कमांड एक्सटेंशन को मान्य करने वाले मानदंडों को सटीक बना सकते हैं या सक्षम नहीं हैं? – VonC

+0

डर्न किया गया ... मैंने अभी रजिस्ट्री की जांच की और पुनः जांच की है, कमांड एक्सटेंशन वास्तव में सक्षम हैं, और कोई अन्य विशेष मान खड़ा नहीं है। विंडोज़ घटना सामान्य से कुछ भी प्रदर्शित नहीं करती है। cmd/ई: अभी भी अपने आप को/f में ('कमांड') कमांड लाइन पर बंद कर देता है ... निराशाजनक;) – VonC

0

रुको ... क्या यह हो सकता है कि आपके पास फ़ाइल नाम के आसपास apostrophes है? एमएस कह रहा है कि फाइलनामसेट को डबल-कोट्स मिलते हैं और शाब्दिक तारों को एस्ट्रोफ़ेस मिलते हैं।

for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions] 

for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions] 

for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions] 

बेशक आप यह कर रहे हैं।

आप उपयोग कर सकते हैं एक तत्काल स्ट्रिंग पर/एफ पार्स तर्क , एकल उद्धरण चिह्न में कोष्ठकों के बीच filenameset लपेटकर के लिए (जो है, 'filenameset')। फ़ाइल नामसेट को फ़ाइल से इनपुट की एक पंक्ति के रूप में माना जाता है, और फिर इसे पार्स किया जाता है। ताकि आदेश एक्सटेंशन अक्षम (भले ही रजिस्ट्री में सक्षम) कर रहे हैं बंद:

+0

आपके सुझाव के लिए केन धन्यवाद। मैं कल काम पर इसे देख लूंगा। – VonC

+0

Argh ... नहीं: आखिरी रूप ('कमांड') तुरंत बंद हो जाएगा डॉस विंडोज – VonC

1

आदेश एक्सटेंशन के बारे में, वहाँ संभावना है CMD.EXE/ई के साथ कहा जाता है।

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

- सूचना से http://www.ss64.com/nt/setlocal.html

SETLOCAL चिपकाया एक ERRORLEVEL सेट हो जाएगा अगर एक तर्क दिया। यह शून्य होगा यदि दो वैध तर्कों में से एक दिया गया है और एक अन्यथा।

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

VERIFY errors 2>nul 
SETLOCAL ENABLEEXTENSIONS 
IF ERRORLEVEL 1 echo Unable to enable extensions 

यह काम करता है क्योंकि "त्रुटियों सत्यापित करें" 1 और उसके बाद के लिए ERRORLEVEL सेट यदि एक्सटेंशन उपलब्ध नहीं हैं तो SETLOCAL ERRORLEVEL मान को रीसेट करने में विफल रहेगा (उदाहरण के लिए यदि स्क्रिप्ट कमांड.com के अंतर्गत चल रही है)

यदि कमांड एक्सटेंशन स्थायी रूप से अक्षम हैं तो SETLOCAL ENABLEEXTENSIONS उन्हें पुनर्स्थापित नहीं करेंगे।

+0

इस विस्तृत उत्तर के लिए धन्यवाद ... अभी भी कोई भाग्य नहीं है। वह डॉस विंडोज़ अभी भी बंद हो जाती है, भले ही ENABLEEXTENSIONS सफलतापूर्वक सक्रिय हो ... – VonC

संबंधित मुद्दे