2009-07-12 9 views
22

मैं बैच बनाना चाहता हूं, जबकि बैच फ़ाइल में विशिष्ट रेखाएं पाती हैं और इन पंक्तियों को संपादित करने में सक्षम हैं।TXT फ़ाइल में बैच/ढूंढें और संपादित करें

उदाहरण:

// txt फ़ाइल //

ex1 
ex2 
ex3 
ex4 

मैं बैच फ़ाइल 'ex3' खोजने के लिए और 'EX5' को यह संपादित यह ऐसा दिखाई जाने के लिए देना चाहते हैं:

ex1 
ex2 
ex5 
ex4 
+20

यह स्पष्ट दिखता है कि मैं कहता हूं कि 'बैच' –

उत्तर

27

मूल विंडोज इंस्टॉलेशन पर, आप या तो बाहरी उपकरण प्राप्त करने की आवश्यकता के बिना बैच (cmd.exe) या vbscript का उपयोग कर सकते हैं। यहाँ myreplace.vbs के रूप में सहेजें और कमांड लाइन

c:\test> cscript /nologo myreplace.vbs > newfile 
c:\test> ren newfile file.txt 
5

यह सामान sed के लिए बनाया गया था (बेशक, आपको इसके लिए अपने सिस्टम पर sed की आवश्यकता है)।

एसईडी के/ex3/EX5/जी 'input.txt> output.txt

आप या तो एक यूनिक्स प्रणाली या एक Windows Cygwin इस के लिए मंच की तरह की आवश्यकता होगी।
GnuWin32 for sed भी है। (GnuWin32 installation and usage)।

+0

यह बहुत सारी चीजें हैं जो मुझे चाहिए। मैं यह जनता सेट करना चाहता हूं; तो यह आसानी से किया जाना चाहिए। –

12

पर VBScript

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFile = "c:\test\file.txt" 
Set objFile = objFS.OpenTextFile(strFile) 
Do Until objFile.AtEndOfStream 
    strLine = objFile.ReadLine 
    If InStr(strLine,"ex3")> 0 Then 
     strLine = Replace(strLine,"ex3","ex5") 
    End If 
    WScript.Echo strLine 
Loop  

में एक उदाहरण है कोई खोज नहीं है और (न XP या 2k3 में आदेश पंक्ति पर समारोह या स्ट्रीम संपादन की जगह विस्टा या उससे परे के बारे में जानें)। तो, आपको एक Ghostdog पोस्ट की गई एक स्क्रिप्ट का उपयोग करने की आवश्यकता होगी, या खोज और sed जैसे सक्षम टूल को प्रतिस्थापित करना होगा।

रूप में इस स्क्रिप्ट से पता चलता रहे, एक से अधिक तरीके यह करने के लिए है:

@echo off 
    SETLOCAL=ENABLEDELAYEDEXPANSION 

    rename text.file text.tmp 
    for /f %%a in (text.tmp) do (
     set foo=%%a 
     if !foo!==ex3 set foo=ex5 
     echo !foo! >> text.file) 
del text.tmp 
11

ghostdog74 के उदाहरण मैं क्या जरूरत के कोर प्रदान की है, के बाद से मैं किसी भी vbs पहले कभी नहीं लिखा गया है और ऐसा करने के लिए आवश्यक कर दिया है । यह सही नहीं है, लेकिन अगर किसी को यह उपयोगी लगता है तो मैंने उदाहरण को एक पूर्ण लिपि में फहराया।

'ReplaceText.vbs 

Option Explicit 

Const ForAppending = 8 
Const TristateFalse = 0 ' the value for ASCII 
Const Overwrite = True 

Const WindowsFolder = 0 
Const SystemFolder = 1 
Const TemporaryFolder = 2 

Dim FileSystem 
Dim Filename, OldText, NewText 
Dim OriginalFile, TempFile, Line 
Dim TempFilename 

If WScript.Arguments.Count = 3 Then 
    Filename = WScript.Arguments.Item(0) 
    OldText = WScript.Arguments.Item(1) 
    NewText = WScript.Arguments.Item(2) 
Else 
    Wscript.Echo "Usage: ReplaceText.vbs <Filename> <OldText> <NewText>" 
    Wscript.Quit 
End If 

Set FileSystem = CreateObject("Scripting.FileSystemObject") 
Dim tempFolder: tempFolder = FileSystem.GetSpecialFolder(TemporaryFolder) 
TempFilename = FileSystem.GetTempName 

If FileSystem.FileExists(TempFilename) Then 
    FileSystem.DeleteFile TempFilename 
End If 

Set TempFile = FileSystem.CreateTextFile(TempFilename, Overwrite, TristateFalse) 
Set OriginalFile = FileSystem.OpenTextFile(Filename) 

Do Until OriginalFile.AtEndOfStream 
    Line = OriginalFile.ReadLine 

    If InStr(Line, OldText) > 0 Then 
     Line = Replace(Line, OldText, NewText) 
    End If 

    TempFile.WriteLine(Line) 
Loop 

OriginalFile.Close 
TempFile.Close 

FileSystem.DeleteFile Filename 
FileSystem.MoveFile TempFilename, Filename 

Wscript.Quit 
5

आप कभी भी "सुदूर" = "खोजें और बदलें" का उपयोग कर सकते हैं। यह जावा के तहत लिखा गया है, इसलिए यह काम करता है जहां जावा काम करता है (काफी हर जगह)। निर्देशिकाओं और उपनिर्देशिकाओं, फ़ाइलों के भीतर खोज और प्रतिस्थापन के साथ काम करता है, उन्हें भी नामित कर सकता है। थोक फाइलों का नाम भी बदल सकते हैं। लेंसेंस = फ्री, दोनों व्यक्तियों या कॉमपनीज़ के लिए। डेवलपर द्वारा बहुत तेज और बनाए रखा। इसे यहां खोजें: http://findandreplace.sourceforge.net/

इसके अलावा आप GrepWin का उपयोग कर सकते हैं। काफी काम करता है। आप इसे यहाँ पा सकते हैं: http://tools.tortoisesvn.net/grepWin.html

6

आप विंडोज पर हैं, तो आप (एफ इंडस्ट्रीज़ एक nd आर eplace टी ext ) FART उपयोग कर सकते हैं। यह केवल 1 सिंगल * .exe फ़ाइल है (कोई लाइब्रेरी आवश्यक नहीं है)।

आपको बस चलाया जाता है करने के लिए:

fart.exe your_batch_file.bat ex3 ex5 
+2

उन्हें ** टी ** अंत तक छड़ी करना पड़ा, है ना? :) – akinuri

0

आप इस तरह कर सकते हैं:

rename %CURR_DIR%\ftp\mywish1.txt text.txt 
for /f %%a in (%CURR_DIR%\ftp\text.txt) do (
if "%%a" EQU "ex3" ( 
echo ex5 >> %CURR_DIR%\ftp\mywish1.txt 
) else (
echo %%a >> %CURR_DIR%\ftp\mywish1.txt 
) 
) 
del %CURR_DIR%\ftp\text.txt 
2
@echo off 
set "replace=something" 
set "replaced=different" 

set "source=Source.txt" 
set "target=Target.txt" 

setlocal enableDelayedExpansion 
(
    for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
     set "line=%%b" 
     if defined line set "line=!line:%replace%=%replaced%!" 
     echo(!line! 
    ) 
) > %target% 
endlocal 

Source। उम्मीद है कि यह किसी की मदद करेगा।

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