2009-07-12 9 views
22

Ich möchte einen Batch während erstellen, die bestimmte Zeilen in einer Batch-Datei findet und diese Zeilen bearbeiten können.Batch/Suchen und Bearbeiten von Zeilen in der TXT-Datei

Beispiel:

// TXT-Datei //

ex1 
ex2 
ex3 
ex4 

i die Batch-Datei 'ex3' und bearbeiten zu 'ex5' lassen es so aussehen finden lassen wollen:

ex1 
ex2 
ex5 
ex4 
+20

es sieht klar aus, wenn ich sage "BATCH" –

Antwort

27

In einer systemeigenen Windows-Installation können Sie entweder batch (cmd.exe) oder vbscript verwenden, ohne dass Sie externe Tools benötigen. hier ein Beispiel in 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  

speichern als myreplace.vbs und in der Befehlszeile

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

Dies ist die Art von Sachen sed wurde gemacht für (natürlich brauchen Sie sed auf Ihrem System dafür).

sed 's/EX3/ex5/g' input.txt> output.txt

müssen Sie entweder ein Unix-System oder eine Windows-Cygwin Art von Plattform.
Es gibt auch GnuWin32 for sed. (GnuWin32 installation and usage).

+0

das ist zu viele Sachen, die ich brauche. Ich möchte diese Öffentlichkeit einstellen; also sollte es leicht gemacht werden. –

12

Es gibt keine Suchen- und Ersetzen-Funktion oder Strombearbeitung in der Befehlszeile in XP oder 2k3 (Dont wissen über Vista oder darüber hinaus). Sie müssen also ein Skript verwenden, wie es Ghostdog geschrieben hat, oder ein Such- und Ersetzen-Werkzeug wie sed.

Es gibt mehr als einen Weg, es zu tun, wie dieses Skript zeigt:

@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 dem Beispiel vorgesehen, um den Kern dessen, was ich brauchte, da ich noch nie irgendwelche vbs geschrieben haben und tun musste, dass . Es ist nicht perfekt, aber ich habe das Beispiel zu einem vollständigen Skript ausgearbeitet, für den Fall, dass es für irgendjemanden nützlich sein sollte.

'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

Sie können immer "FAR" = "Suchen und Ersetzen" verwenden. Es ist unter Java geschrieben, also funktioniert es, wo Java funktioniert (so ziemlich überall). Funktioniert mit Verzeichnissen und Unterverzeichnissen, sucht und ersetzt Dateien, kann sie auch umbenennen. Kann auch Bulk-Dateien umbenennen. Lizenz = frei, für Einzelpersonen oder Firmen. Sehr schnell und vom Entwickler gewartet. Finden Sie es hier: http://findandreplace.sourceforge.net/

Auch Sie können GrepWin verwenden. Funktioniert ziemlich genau so. Sie können es hier finden: http://tools.tortoisesvn.net/grepWin.html

6

Wenn Sie unter Windows sind, können Sie FART (F ind A nd R eplace T ext) verwenden. Es ist nur 1 einzelne * .exe-Datei (keine Bibliothek benötigt).

Alles, was Sie brauchen, um ausgeführt:

fart.exe your_batch_file.bat ex3 ex5 
+2

Sie mussten ** T ** ext das Ende, nicht wahr? :) – akinuri

0

Sie können wie folgt tun:

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. In der Hoffnung, dass es jemandem hilft.