मैं "कमांड" के लिए कैसे पाइप करूं?


11

मैं कमांड के लिए पाइप कैसे करूं। इसलिए इसके बजाय

    C:\asd>ipconfig | findstr "Address" >a

   C:\asd>for /f "tokens=15" %f in (a) do @echo %f
   192.168.1.3

मैं इसे एक पंक्ति में करने में सक्षम होना चाहूंगा।

C:\asd>ipconfig | findstr "Address" | for /f "tokens=15" %f do @echo %f
do was unexpected at this time.

जवाबों:


22

हालाँकि यह प्रलेखित नहीं होता है, आप फ़ॉर कमांड के अंदर कमांड को पाइप कर सकते हैं। मैंने पहली बार इस उदाहरण से इसके बारे में सीखा :

SC query | FOR /F "tokens=2" %%i IN ('FIND /I "SERVICE_NAME"') DO @ECHO %%i

आपके कोड का संशोधित संस्करण काम करता है:

C:\>ipconfig | for /f "tokens=14" %f in ('findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y

आप कमांड के अंदर "अधिक" का उपयोग कर सकते हैं, जैसा कि इस उत्तर में वर्णित है , एक मनमाना कमांड से इनपुट इनपुट पार्स करने के लिए:

C:\>ipconfig | findstr "Address" | for /f "tokens=14" %f in ('more') do @echo %f
192.168.x.x
192.168.y.y

10

के लिए प्रलेखन for( for /?यह देखने के लिए भागो ) को देखते हुए, मुझे नहीं लगता कि for /fएक पाइप से पढ़ा जाएगा। केवल मान्य स्रोत फ़ाइल-सेट, "स्ट्रिंग" और 'कमांड' हैं।

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

आप forइस तरह से कमांड डाल सकते हैं :

for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f

192.168.x.x
192.168.y.y

(यह इंगित करने के लिए न्यूरोलिसिस के लिए धन्यवाद ^|और यह सिर्फ नहीं है |)

या आप ipconfig | findstr "Address"एक अलग बैच स्क्रिप्ट और कॉलिंग में डालने की कोशिश कर सकते हैं :

for /f "tokens=14" %f in ('ipaddresses') do @echo %f

(आप स्क्रिप्ट कहा जाता है संभालने ipaddresses)।

या आप इस तरह forसे findstrभी काम करने के लिए उपयोग कर सकते हैं :

for /f "tokens=2,14" %i in ('ipconfig') do @if %i==Address. @echo %j

192.168.x.x
192.168.y.y

यह काफी समान नहीं है क्योंकि यह IPv6 पतों से मेल नहीं खाएगा, लेकिन उन लाइनों के साथ कुछ काम कर सकता है।

यह भी ध्यान दें कि मैं बदल tokens=15गया tokens=14। मुझे लगता है कि लाइन पर अंतिम क्षेत्र टोकन 14. मेरे लिए वैसे भी काम करता है।


यदि आप मेरे प्रश्न को देखते हैं, तो आप देखेंगे कि मैं एक अस्थायी फ़ाइल का उपयोग करने के बारे में जानता हूं, यह मेरा उदाहरण था, मैंने बस फ़ाइल को 'a' कहा था। शुरुआत में आप जो कहते हैं, उसके साथ, आपके पास एक बिंदु है, जो पाइप को करने के सबसे करीब है .. कमांड को "इन" में डाल रहा है। और मुझे लगता है कि चूंकि कोई ऐसा कर सकता है, इसलिए यह समझा सकता है कि कोई इसके लिए पाइप का उपयोग क्यों नहीं कर सकता है। ऐसा लगता है कि कोई इसके लिए एक पाइप का उपयोग नहीं कर सकता है। इंटरेस्टिन आपने भी पाइपलाइन शब्द का उल्लेख किया है .. मैंने उस पाइप को नहीं सुना था .. लेकिन एक गूगल इसे दिखाता है।
बार्लोप

4
रिकॉर्ड के लिए, इसका कारण "पाइपलाइनों का समर्थन नहीं करता है" केवल इसलिए है क्योंकि आपने इसे नहीं छोड़ा है, यह forइसके बजाय पाइपिंग है ipconfig। बस for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f, जब ^बच चरित्र है।
मैथ्यू कार्टियर

धन्यवाद न्यूरोलिसिस, इसमें शामिल करने के लिए मेरे उत्तर को अपडेट करेगा।
मिकेल

अच्छी तरह से मैं इसके लिए पहले की तरह, पाइपिंग का मतलब था। लेकिन मैं आश्वस्त हूं कि कोई नहीं कर सकता। लेकिन मिकेल के सुझाव के अनुसार "इन" कर सकते हैं। लेकिन मिकेल की लाइन को आजमाते हुए, मैंने मिकेल की लाइन के साथ एक समस्या को चलाया .. और आपने (न्यूरोलिसिस) तय किया कि पाइप से बचकर।
बार्लोप

@barlop, हां, मैं अस्थायी सुझाव को हटा दूंगा। "पाइपलाइन" एक यूनिक्स शब्द है जिसका अर्थ है बीच में पाइप के साथ आदेशों की एक श्रृंखला।
मिकेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.