विंडोज सीएमडी के साथ कई टेक्स्ट फ़ाइलों (एक निर्देशिका के भीतर) में स्ट्रिंग को कैसे खोजें और बदलें?


5

मैं एक निर्देशिका के भीतर कई पाठ फ़ाइलें, जिनमें से प्रत्येक मैं स्ट्रिंग की प्रत्येक पुनरावृत्ति को बदलना चाहते है 1 setlinewidth को 10 setlinewidth । मैं विंडोज cmd के माध्यम से यह कैसे करूँ? कृपया मदद कीजिए।

जवाबों:


6

यदि आप तृतीय-पक्ष उपयोगिताओं को स्थापित कर सकते हैं, तो इस प्रकार के ऑपरेशन के लिए ग्नू सेड दर्जी है। लिंक एक विंडोज संस्करण की ओर इशारा करता है जो सोर्सफोर्ग में होस्ट किया गया है जिसे आप डाउनलोड और इंस्टॉल कर सकते हैं। यह प्रॉम्प्ट प्रॉम्प्ट पर होगा:

for %i in (*.txt) do sed -i "s/1 setlinewidth/10 setlinewidth/g" %i

नोट:-i विकल्प के साथ , sed विचाराधीन फाइलों को अधिलेखित करने जा रहा है, इसलिए सुनिश्चित करें कि आपने गलत होने पर बस बैकअप आसानी से उपलब्ध है।

यदि आप sed उपयोगिता को स्थापित नहीं कर सकते हैं, तो यह केवल बिल्ट-इन बैच भाषा का उपयोग करके अधिक कठिन होने वाला है।

संपादित करें: मैंने एक छोटे बैच फ़ाइल को एक साथ रखा है जो किसी बाहरी उपकरण के बिना प्रतिस्थापन का प्रदर्शन करेगा। इसे foo.cmdया अपने पसंदीदा नाम के रूप में सहेजें और कमांड लाइन से इसे लागू करें:foo.cmd

एक चेतावनी: यह आपके प्रश्न में उदाहरणों से विशेष रूप से लिखा गया है। यदि पहले या बाद में लाइन के आरंभ या अंत में अन्य पाठ या अतिरिक्त स्थान हैं 1 setlinewidth, तो यह बैच फ़ाइल काम नहीं करेगी। यह एक .bak एक्सटेंशन (जैसे textfile.txt.bak) के साथ मूल पाठ फ़ाइल की एक प्रति भी बचाएगा।

@echo off
setlocal ENABLEEXTENSIONS
setlocal ENABLEDELAYEDEXPANSION

for %%a in (*.txt) do (
    echo Processing %%a...
    for /f "delims=^ tokens=1" %%i in (%%a) do (
        if /i "%%i"=="1 setlinewidth" (
            echo 10 setlinewidth>>%%a.new
        ) else (
            echo %%i>>%%a.new
        )
    )
    move /y %%a %%a.bak > nul
    ren %%a.new %%a
)

भाग 2 में फिक्स है। योगदान के लिए धन्यवाद!
कार्ला हूक

7

पॉवर्सशेल में उपयोगिताओं हैं जो किसी भी बाहरी सॉफ़्टवेयर या उपयोगिताओं को डाउनलोड किए बिना इस समस्या को हल करेंगे। की जाँच करें इस लेख स्क्रिप्टिंग लड़का द्वारा, यह बहुत अच्छा है। मैं यह भी कहूंगा कि सेट-सामग्री प्रलेखन पर एक नज़र डालें ।

उदाहरण:

(Get-Content C:\Scripts\Test.txt) | Foreach-Object {$_ -replace "oldString", "newString"} | Set-Content C:\Scripts\Test.txt


मैंने घर पर अपने पीसी का उपयोग करके इसका परीक्षण किया और यह काम करता है। अफसोस की बात है, मेरे कार्यस्थल पीसी में पॉवरशेल स्क्रिप्टिंग अक्षम है, मुझे डिफ़ॉल्ट विंडोज सीएमडी प्रॉम्प्ट के साथ छोड़ दिया गया है। धन्यवाद वैसे भी :)
कार्ला हुक

@CarlaHook पॉवरशेल स्क्रिप्ट चलाते समय आप इसे आसानी से किसी अन्य पैरामीटर के साथ अक्षम कर सकते हैं, stackoverflow.com/a/9167524/5008962 देखें ।
रगड़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.