इस आदेश से आउटपुट के साथ समस्या


0

मुझे बस एहसास हुआ कि मैं इस रजिस्ट्री कुंजी पर शुरू में एक बैट फाइल निष्पादित कर रहा हूं, जिसमें echo running abcकुछ और अप्रासंगिक चीजें थीं

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

तो यहाँ मैंने उस बैट फाइल को संशोधित किया है .. यह सिर्फ एक पंक्ति है, इसमें कुछ भी अप्रासंगिक नहीं है।

आप बैट फ़ाइल की सामग्री देखते हैं।

यहाँ cmd प्रॉम्प्ट से कुछ आउटपुट दिखाया गया है जो अब स्थिति को दिखा रहा है जो एक ही मौलिक समस्या है लेकिन आपको समस्या को पुन: उत्पन्न करने में सक्षम होना चाहिए

अब सवाल यह है,

  • इसे इको sss और न इको sss टेट क्यों कहते हैं?
  • मैं cmd ​​के रनिंग को कैसे दबा सकता हूं या उस आरंभिक बैट फाइल को फॉर के साथ कैसे दबा सकता हूं? फॉर स्टेटमेंट को वास्तव में "इको जी" प्रदर्शित करना चाहिए, न कि "इको एसएसएस" या "इको एसएसएस टीटीटी"।

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
sss ttt
C:\Documents and Settings\Administrator>cd\

C:\>type \blah\startfile.bat <ENTER>
@echo sss ttt   

C:\>  

C:\>for /f %f in ('echo g ^| findstr "g"') do echo %f <ENTER>

C:\>echo sss
sss

C:\>echo g
g

C:\>

2
पुन: पेश नहीं कर सकता। विंडोज़ का कौन सा संस्करण है?
मैट

मुझे "कमांड का सिंटैक्स गलत है।"
साइमन शीहान

1
यह मेरे लिए अपेक्षित के रूप में काम करता है (7 जीत) - कोई रहस्य "गूंज चल" कमांड।
11c atιᴇ007

@ techie007 xp लेकिन सिर्फ एक और मशीन पर यह कोशिश की और यह केवल एक कंप्यूटर पर है
बारलोप

@jaquer ^ बच चरित्र यह इसके बिना कोशिश करते हैं और आप देखते हैं कि इसे इसकी आवश्यकता है। अन्यथा यह करने की कोशिश हो सकती है | प्रसंस्करण में जल्दी और एक त्रुटि देता है जैसा कि आप देखते हैं कि क्या आप ^ का उपयोग नहीं करते हैं।
बार्लॉप

जवाबों:


1

इसे इको sss और न इको sss टेट क्यों कहते हैं?

क्योंकि रेखा sss tttमें एक अंतरिक्ष वर्ण होता है। forआदेश में यह और दुकानों पहली छमाही tokenize sssमें %fऔर दूसरी छमाही tttमें %gचर।

मैं cmd ​​के रनिंग को कैसे दबा सकता हूं या उस आरंभिक बैट फाइल को फॉर के साथ कैसे दबा सकता हूं? फॉर स्टेटमेंट को वास्तव में "इको जी" प्रदर्शित करना चाहिए, न कि "इको एसएसएस" या "इको एसएसएस टीटीटी"।

ऐसा लगता है कि echo g ^| findstr "g"एक नए कमांड दुभाषिया का मूल्यांकन करने के लिए प्रारंभिक रूप से आरंभ किया जाता है और आपका \blah\startfile.batस्वचालित रूप से क्रियान्वित किया जाता है। अपने बैच को कुछ भी आउटपुट न करें।


0

यदि आप %fबैच फ़ाइल में उपयोग करने जा रहे हैं , तो आपको इसे दूसरे के साथ भागने की आवश्यकता है %:

for /f %%f in ('echo g ^| findstr "g"') do echo %%f

उसे अपनी बैच फ़ाइल में रखें और आपको वे परिणाम प्राप्त होने चाहिए जिनकी आप तलाश कर रहे हैं।


फॉर ए बैच फ़ाइल में नहीं था। प्रश्न को अधिक ध्यान से पढ़ने की कोशिश करें। कमांड प्रॉम्प्ट से डंप को देखें।
बारलोप

ओह। हां, अब मैं देख रहा हूं। मैं अपना उत्तर अपडेट करूंगा ...
17

0

बस Vlastimil के जवाब पर थोड़ा विस्तार करने के लिए ...

जब FORआदेश निष्पादित करता है "echo g"और पाइप उत्पादन करने के लिए findstr, के लिए पहले एक नया आदेश प्रोसेसर जिसकी वजह से शुरू करने के लिए है \blah\startfile.batनिष्पादित किया जाना है।

\ blah \ startfile.bat एक लाइन युक्त आउटपुट देता है sss ttt। यही कारण है कि लाइन द्वारा संसाधित किया जाता है के लिए किया जाता है और नहीं करने के लिए पारित कर दिया findstr

के लिए मदद अनुसार के लिए :

प्रसंस्करण में ... शामिल हैं, इसे पाठ की अलग-अलग पंक्तियों में तोड़कर प्रत्येक पंक्ति को शून्य या अधिक टोकन में पार्स कर रहा है। लूप के लिए बॉडी को तब वेरिएबल वैल्यू (एस) के साथ बुलाया जाता है, जो पाए गए स्ट्रिंग (एस) में सेट होता है। डिफ़ॉल्ट रूप से, / F प्रत्येक पंक्ति से पहले खाली टोकन को अलग करता है ...

के लिए डिफ़ॉल्ट सीमांकक के लिए कर रहे हैं: "," (अंतरिक्ष अल्पविराम और अर्ध-उपनिवेश)।

प्रक्रियाओं के लिए पहली पंक्ति में स्ट्रिंग शामिल है: sss ttt । उस स्ट्रिंग में एक " "(स्पेस) होता है, जो फॉर के लिए डिफॉल्ट सीमांकक है , जो लाइन को पार्स करता है और पहले टोकन स्ट्रिंग: "sss" को "% f" असाइन करता है । तो "इको% f" केवल के साथ एक लाइन आउटपुट करता है: "sss" । यह पहली पंक्ति है जिसे आप प्रिंट करते हुए देखते हैं। "TTT" बस क्योंकि त्याग दिया जाता है "के लिए ... गूंज% च" आदेश पहले टोकन से ज्यादा कुछ भी शामिल करने के लिए निर्दिष्ट नहीं किया।

यदि FOR कमांड को अलग तरह से लिखा जाता है, तो आपने पूर्ण पंक्ति "sss ttt" को प्रतिध्वनित होते देखा होगा ।

यहाँ 3 तरीके हैं के लिए आदेश है कि ऐसा करने के लिए लिखा जा सकता था।

पहला तरीका, का उपयोग कर "delims="विकल्प, सीमांकक के लिए सेट के लिए करने के लिए "खाली" है, तो के लिए रिटर्न 1 निशानी के रूप में पूरे लाइन। टोकन अभी भी पार्स किए गए हैं, और सभी सीमांकक ( ";" ) हटा दिए जाते हैं, फिर सभी टोकन को फिर से प्रत्येक टोकन के बीच के स्थान के साथ जोड़ दिया जाता है। यह संयुक्त मान "% f" चर में लौटाया जाता है

C:\>for /f "delims=" %f in ('echo sss ttt')  do echo %f

C:\>echo sss ttt
sss ttt

C:\>for /f "delims=" %f in ('echo mm;nn,oo, ;ss ,, tt') do echo %f

C:\>echo mm nn oo ss tt
mm nn oo ss tt

यह अगला तरीका, "tokens=*"विकल्प का उपयोग करते हुए , बताए गए सभी टोकन को निर्दिष्ट चर ( "% f" ) के मूल्य में डालने के लिए कहता है । टोकन अभी भी पार्स किए गए हैं, और सभी सीमांकक हटा दिए जाते हैं, फिर सभी टोकन को फिर से प्रत्येक टोकन के बीच के स्थान के साथ जोड़ दिया जाता है।

C:\>for /f "tokens=*" %f in ('echo sss ttt')  do echo %f

C:\>echo sss ttt
sss ttt

C:\>for /f "tokens=*" %f in ('echo mm;nn,oo, ;ss ,, tt') do echo %f

C:\Users\1-kevin>echo mm nn oo ss tt
mm nn oo ss tt

यह तीसरा तरीका, "tokens=1,*"विकल्प का उपयोग करते हुए , निर्दिष्ट चर ( "%" " ) के मूल्य में पाया गया पहला (1) टोकन लगाने के लिए कहता है । और, बचे हुए टोकन को पार्स किया जाता है, और सभी सीमांकक हटा दिए जाते हैं, फिर उन सभी बचे हुए टोकनों को फिर से प्रत्येक टोकन के बीच के स्थान के साथ जोड़ दिया जाता है, और यह संयुक्त मान उस अक्षर के साथ नामित चर में वापस आ जाता है जो निर्दिष्ट चर नाम का अनुसरण करता है (इसलिए इस मामले में, चर "% g" )।

C:\>for /f "tokens=1,*" %f in ('echo sss ttt')  do echo %f %g

C:\>echo sss ttt
sss ttt

C:\>for /f "tokens=1,*" %f in ('echo mm;nn,oo, ;ss ,, tt') do echo "%f" "%g"

C:\>echo "mm" "nn oo ss tt"
"mm" "nn oo ss tt"

ध्यान दें कि निम्नलिखित काम नहीं करेगा क्योंकि "% f" के निर्दिष्ट चर से परे चर के लिए परिभाषित "टोकन =" नहीं हैं :

C:\>for /f %f in ('echo sss ttt')  do echo %f %g

C:\>echo sss %g
sss %g


इसलिए, आपके उदाहरण में, यदि आपने "delims="विकल्प जोड़ा है , तो आप यह देखेंगे:

C:\>for /f "delims=" %f in ('echo g ^| findstr "g"') do echo %f

C:\>echo sss ttt
sss ttt

C:\>echo g
g

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