बैच फ़ाइल के माध्यम से पाठ ढूंढें और बदलें


0

मैंने इस प्रश्न को देखा है लेकिन मुझे जो भी चाहिए उसके लिए उपयुक्त उत्तर के साथ कभी नहीं

मैं कंप्यूटर सिस्टम पर रिमोट टेक सपोर्ट करने का काम करता हूं और मुझे जिन चीजों को करने की जरूरत होती है उनमें से एक है ini फाइलें खोलना और एक नई के साथ कुछ लाइनों को बदलना

एक उदाहरण के रूप में हम कहेंगे।

program.ini

कार्यक्रम की स्थिति = ग्राहक

वैसे मुझे इसे सर्वर में बदलने की आवश्यकता होगी ताकि यह पढ़े

कार्यक्रम की स्थिति = सर्वर

हां, मैं इसे नोटपैड में खोल सकता हूं, मैं एक बैच फ़ाइल में कमांड लाइन के माध्यम से ऐसा करने में सक्षम होना चाहता हूं क्योंकि मेरे पास पहले से ही एक बैच टूल है जिसे मैंने बाकी सब कुछ के लिए बनाया है।

अब, ध्यान दें कि प्रत्येक कंप्यूटर पॉवरशेल स्क्रिप्ट का समर्थन नहीं करता है, इसलिए इसे केवल एक बैच फ़ाइल में होना चाहिए। मैं कोई अतिरिक्त सॉफ़्टवेयर डाउनलोड नहीं कर सकता क्योंकि ये मेरे सिस्टम नहीं हैं जिन्हें मैं कनेक्ट कर रहा हूं।

किसी को पता है कि यह शुद्ध रूप से बैच के माध्यम से कैसे किया जाएगा क्योंकि मैं नुकसान में हूं। कमांड लाइन के माध्यम से एक संपादक को खोलने की तलाश नहीं है, बस एक सीधा इसे चलाते हैं और उस लाइन को आईएनआई फ़ाइल में बदल दिया जाता है।

किसी भी इनपुट के लिए धन्यवाद-टेरा


क्या संपादित लाइनों को क्रम में रहने की आवश्यकता है? क्या हम VBScript और cscript मान सकते हैं?
harrymc

हाँ, यह लगभग 100+ लाइनों के साथ एक आईएनआई है और इसे क्रम में रहना है। और जैसा कि कहा गया है, इसमें कोई अतिरिक्त फाइल, इंस्टॉलेशन या डाउनलोड शामिल नहीं हो सकते हैं। बैच स्क्रिप्ट में शुद्ध कमांड लाइन कमांड में एक रास्ता खोज रहा है। मैं लाइनक्स बैश के लिए बहुत अधिक अभ्यस्त हूं और अभी भी खिड़कियों के लिए यह सामान सीख रहा हूं। अगर मैं गलत हूं तो मुझे सही करें, लेकिन वीबीएसस्क्रिप्ट या सीस्क्रिप्ट में अतिरिक्त फ़ाइलों की आवश्यकता नहीं होगी?
टेरा

1) जब आप किसी टिप्पणी का उत्तर देने के लिए अधिक जानकारी जोड़ते हैं, तो कृपया संपादित करें पर क्लिक करें और इसे अपने मूल प्रश्न में जोड़ें, इसलिए प्रश्न में समस्या को समझाने के लिए आवश्यक सभी जानकारी शामिल हैं। फिर, टिप्पणी को उसके अंत में ग्रे (एस) पर क्लिक करके हटाएं, क्योंकि टिप्पणियाँ ढेर हो सकती हैं और जब वे करते हैं, तो कुछ टिप्पणियां छिप जाती हैं।
K7AAY

विंडोज में कोई मूल खोज पाठ और प्रतिस्थापित कमेंड नहीं है। 2) पीसी डब्ल्यू / पॉवरशेल के लिए, आप कैट प्रोग्राम की तरह w / एक कमांड स्क्रिप्ट कर सकते हैं % {$ <underscore> -replace "प्रोग्राम स्टेटस = क्लाइंट", "प्रोग्राम स्टेटस = सर्वर"} (<अंडरस्कोर> w / एक वास्तविक अंडरस्कोर कैरेक्टर।
K7AAY

3) पीसी w / कोई PowerShell बताया मुक्त स्रोत का सुझाव के लिए sed और उसके निर्भरता gnuwin32.sourceforge.net/packages/sed.htm (जिससे किसी भी स्थापना से बचने या रजिस्ट्री करने के लिए बदल) एक अस्थायी निर्देशिका के लिए, कि एक sed स्क्रिप्ट चलाने कार्य के लिए निर्देशिका, फिर अंतिम कार्य के रूप में उसे और उसकी निर्भरता को शुद्ध करें। 4) एक विकल्प है ओपन सोर्स फ्रीडोस एडलिन en.wikipedia.org/wiki/Edlin#Scripts यह विंडोज 10 x64 और x32 और पहले के विंडोज संस्करणों में चलता है। यह सरल खोज पाठ और स्क्रिप्टिंग को बदलने की अनुमति देता है। sourceforge.net/projects/freedos-edlin/files/latest/download
K7AAY

जवाबों:


2

इस बैच फ़ाइल में कुछ नैदानिक ​​जानकारी भी शामिल है। सेटलोक लाइन को एक लूप में चर के साथ ठीक से खेलने के लिए आवश्यक है।

इस पद्धति का उपयोग करने के सबसे महत्वपूर्ण दुष्परिणाम यह हैं कि रिक्त रेखाओं को हटा दिया जाता है (वे इसके लिए अनदेखा कर दिए जाते हैं) और यह कि आपके परीक्षण ("नया मूल्य लिखें" अनुभाग में) बहुत विशिष्ट हैं: रिक्त स्थान और मामला। आप केस को असंवेदनशील / i के साथ मिलान कर सकते हैं, लेकिन जब से आप अपने प्रश्न में रिक्त स्थान शामिल कर रहे हैं मुझे संदेह है कि आप उन्हें शामिल करना पसंद करते हैं। आपको प्रत्येक संभावित तुलना को दोहराने के लिए उस अनुभाग में किए गए कई लाइनों को शामिल करना होगा।

@ECHO OFF
setlocal enableDelayedExpansion

FOR /F "tokens=1,* delims==" %%i IN (test.ini) DO (
    SET sdone=0
    SET "sname=%%i"
    SET "svalue=%%j"
    ECHO.Name:  !sname!
    ECHO.Value: !svalue!

    :: write out headers
    IF "!sdone!"=="0" IF "!sname:~0,1!"=="[" SET sdone=1&&ECHO.Type:  Header&&ECHO.!sname!>>new.ini

    :: write out the new value if it's client
    IF "!sdone!"=="0" IF "!sname!"=="program status" IF "!svalue!"=="client" SET sdone=1&&ECHO.Type:  Rewrite&&ECHO.!sname!=server>>new.ini
    IF "!sdone!"=="0" IF "!sname!"=="program status " IF "!svalue!"==" client" SET sdone=1&&ECHO.Type:  Rewrite&&ECHO.!sname!=server>>new.ini

    :: write out anything else
    IF "!sdone!"=="0" SET sdone=1&&ECHO.Type:  Content&&ECHO.!sname!=!svalue!>>new.ini

    :: a little padding to read the debug info
    ECHO.
)

अंत में आप मूल फ़ाइल को अधिलेखित करने के लिए कुछ जोड़ना चाहते हैं, जैसे कुछ:

copy /y new.ini test.ini

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