2010-06-17 16 views
12

मेरे पास मैक्रो नामों की एक सूची (प्रति पंक्ति एक) के साथ एक टेक्स्ट फ़ाइल है। मेरा अंतिम लक्ष्य वर्तमान निर्देशिका की फ़ाइलों में मैक्रो का नाम कितनी बार प्रकट होता है इसका प्रिंट प्राप्त करना है।खोजने के लिए पाइपिंग इनपुट

मैक्रो के नाम C:\temp\macros.txt में हैं। कमांड प्रॉम्प्ट में कमांड प्रॉम्प्ट में

type C:\temp\macros.txt ठीक प्रिंट करता है।

अब मैं उस आउटपुट को findstr के मानक इनपुट में पाइप करना चाहता हूं।

type C:\temp\macros.txt | findstr *.ss (एसएस फाइल प्रकार है जहां मैं मैक्रो नामों की तलाश में हूं)।

यह काम नहीं प्रतीत होता है, मुझे कोई परिणाम नहीं मिलता है (बहुत तेज़, यह बिल्कुल प्रयास नहीं करता है)। findstr <the first row of the macro list> *.ss काम करता है।

मैंने बिना किसी सफलता के findstr *.ss < c:\temp\macros.txt भी कोशिश की।

उत्तर

15

मुझे लगता है कि आप findstr कामों को थोड़ा उलझन में डाल रहे हैं। यह इनपुट फ़ाइल (चीजों को खोजने के लिए - चीजों को खोजने के लिए नहीं) या तो फ़ाइल नाम (पैटर्न) या stdin से प्राप्त करने के लिए, लेकिन जो चीजें आप खोज रहे हैं हमेशा कमांड लाइन पर findstr के तर्क के रूप में दी गई है ।

findstr foo xyz.txt 

फ़ाइल xyz.txt में स्ट्रिंग foo पाता है।

type meh.txt | findstr x 

पिछला आदेश के उत्पादन में स्ट्रिंग x पाता है (इस मामले में फ़ाइल meh.txt की सामग्री - type आदेश का एक अच्छा बेकार, ज्यादा cat की आम दुरुपयोग के लिए समान)।

चूंकि आप के बाद हैं, मैक्रो नामों की वास्तविक रेखाओं के बजाय, मैं एक अलग दृष्टिकोण सुझाता हूं। आपकी फ़ाइल की सामग्री पर

for /f "delims=" %x in (macros.txt) do @(echo %x: & find /c "%x" *.ss) 

for पाश दोहराता, लाइन-वार: यह है कि मैक्रो युक्त अपनी फ़ाइल प्रति पंक्ति में एक सूचीबद्ध करता है मान लिया गया है। इसके बाद वह उस नाम को प्रिंट करने के लिए आगे बढ़ता है जिसे आप खोज रहे हैं और find /c निष्पादित करते हैं जो वास्तव में मेल खाने वाली रेखाओं की गणना करता है।

+1

मुझे लगता है! क्या यह जांचने का कोई तरीका है कि पाइप से कौन सा पैरामीटर लिया जा सकता है? आपका आखिरी आदेश ठीक से काम करता था, हालांकि 'ढूंढ' का आउटपुट बहुत बदसूरत है। धन्यवाद! – Gauthier

+0

ठीक है, आप सभी '* .ss' फ़ाइलों पर मैन्युअल रूप से (' for' के साथ) पुन: सक्रिय कर सकते हैं और उन पर 'find/c' फेंक सकते हैं, इसके आउटपुट को पार्स कर सकते हैं और इसे स्वयं प्रारूपित कर सकते हैं। और अच्छी तरह से, अधिकांश समय यह स्पष्ट है कि एक प्रोग्राम पाइपलाइन इनपुट के रूप में स्वीकार करता है क्योंकि उस पथ का आमतौर पर डेटा की बड़ी मात्रा के लिए उपयोग किया जाता है जिसे अन्यथा फ़ाइल से पढ़ा जाता है। मुझे अभी तक एक प्रोग्राम नहीं देखना है (पावरशेल cmdlets गिनती नहीं है) जो पाइपलाइन से मनमाने ढंग से तर्क स्वीकार करता है। – Joey

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