मैं फ़ाइलों में एक स्ट्रिंग को बदलने के लिए एक बैच फ़ाइल का उपयोग कैसे करूं?


1

मेरी SQL फ़ाइलों में, मैंने हार्डकोड किया है C:\ सभी आउटपुट फ़ाइल पथों में निर्देशिका, लेकिन ऐसे समय होते हैं, जहां ग्राहक आउटपुट को संग्रहीत करना चाहता है E:\, उदाहरण के लिए।

मैं केवल बैच के साथ ऐसा करने के बारे में कैसे जाना है? मैंने PowerShell का उपयोग करने के बारे में सोचा, लेकिन यह क्लाइंट मशीनों पर सक्षम नहीं है।

मैं क्या करना चाहूंगा:

  1. फिर से सभी निर्देशिकाओं के माध्यम से जाना।
  2. प्रत्येक निर्देशिका में, खोजें C:\ और के साथ बदलें E:\

जवाबों:


1

हाँ, आँख बंद करके थोक प्रतिस्थापन की तरह एक पूरी निर्देशिका वृक्ष संरचना पर मुझे परेशान कर देगा लेकिन अगर आपको लगता है कि यह सुरक्षित है ...

यह संभावित रूप से मुश्किल है कि आप अपनी फ़ाइल सामग्री के आधार पर शुद्ध बैच का उपयोग करना चाहते हैं। लेकिन यह एक हाइब्रिड JScript / बैच उपयोगिता के साथ करना आसान है जिसे मैंने REPL.BAT कहा था। उपयोगिता रेगेक्स खोज करती है और स्टडिन को प्रतिस्थापित करती है, और परिणाम को स्टडआउट लिखती है। यह शुद्ध स्क्रिप्ट है जो कि XP ​​से आगे किसी भी आधुनिक विंडोज मशीन पर चलती है, इसलिए इसे किसी भी 3 पार्टी की स्थापना की आवश्यकता नहीं है .exe फ़ाइल। REPL.BAT उपयोगिता और प्रलेखन यहां उपलब्ध है।

मान लें कि आपके पास वर्तमान निर्देशिका में REPL.BAT है, या बेहतर अभी तक, आपके पेटीएम के भीतर कहीं है, तो निम्नलिखित सरल एक लाइनर को कमांड लाइन से सीधे चाल करना चाहिए, किसी बैच की आवश्यकता नहीं है।

for /r %F in (*.sql) do @(type "%F"|repl "C:\" "E:\" >"%F.new"&move /y "%F.new" "%F" L >nul)

आप खोज मामले को जोड़कर असंवेदनशील बना सकते हैं I स्विच।

for /r %F in (*.sql) do @(type "%F"|repl "C:\" "E:\" I >"%F.new"&move /y "%F.new" "%F" L >nul)

या यदि आप एक बैच स्क्रिप्ट पसंद करते हैं (के साथ) I स्विच)

@echo off
for /r %%F in (*.sql) do (
  type "%%F"|repl "C:\" "E:\" LI >"%%F.new"
  move /y "%%F.new" "%%F" >nul
)

मैंने इस्तेमाल किया L शाब्दिक स्विच भर में; दूसरा विकल्प बच निकलने का है \ बजाय।

repl "C:\\" "E:\\" I

मैंने कोशिश की Option 3, लेकिन मुझे मिलता है The process tried to write to a nonexistent pipe. Test Folder\REPL.bat(191, 1) Microsoft JScript runtime error: Syntax error in regular expression
Bob.

@ याब - दोह! निश्चित ही आपको वह त्रुटि मिलती है। मैं भूल गया कि `\ _ एक रेगीक्स मेटा चरित्र है। उसके लिए माफ़ करना। मैंने अपना उत्तर संपादित कर लिया है - अब सब ठीक होना चाहिए।
dbenham

बहुत बढ़िया! मुझे हटाना पड़ा @echo off इसलिए मुझे पता था कि यह अभी भी काम कर रहा है और न कि वहाँ बैठा है।
Bob.

वहाँ एक रास्ता बनाने के लिए इसे देखो। / SQL पुनरावर्ती है? यदि कोई गलती से अन्य निर्देशिकाओं को सम्मिलित करता है जिसमें एसक्यूएल होता है, तो मैं उन को अधिलेखित नहीं करना चाहता।
Bob.

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