it-swarm.com.de

Stapeln / Suchen und Bearbeiten von Zeilen in TXT Datei

Ich möchte einen Stapel erstellen, der bestimmte Zeilen in einer Stapeldatei findet und diese Zeilen bearbeiten kann.

Beispiel:

// TXT-DATEI //

ex1
ex2
ex3
ex4

ich möchte, dass die Batch-Datei "ex3" findet und dies in "ex5" bearbeitet, damit es so aussieht:

ex1
ex2
ex5
ex4
25
Deniz Zoeteman

Bei einer nativen Windows-Installation können Sie entweder batch (cmd.exe) oder vbscript verwenden, ohne externe Tools zu benötigen. Hier ist 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 Sie als myreplace.vbs und in der Befehlszeile:

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

In XP oder 2k3 (keine Kenntnisse über Vista oder höher) gibt es keine Such- und Ersetzungsfunktion oder keine Stream-Bearbeitung in der Befehlszeile. Daher müssen Sie ein Skript wie das von Ghostdog verwenden gepostet, oder ein Such-und-Ersetz-fähiges Tool wie sed.

Es gibt mehr als eine Möglichkeit, dies 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
13
RobW

das Beispiel von ghostdog74 lieferte den Kern dessen, was ich brauchte, da ich noch nie ein vbs geschrieben hatte und dies tun musste. Es ist nicht perfekt, aber ich habe das Beispiel in ein vollständiges Skript umgewandelt, falls jemand es nützlich findet.

'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
11
Eric

Unter Windows können Sie FART ( [~ # ~] f [~ # ~] ind [~ # ~] a [~ # ~] nd [~ # ~] r [~ # ~] eplace [~ # ~] t [~ # ~] ext). Es ist nur eine einzige * .exe-Datei (keine Bibliothek erforderlich).

Alles was Sie brauchen, ist ausgeführt:

fart.exe your_batch_file.bat ex3 ex5
7
Dio Phung

Sie können immer "FAR" = "Suchen und Ersetzen" verwenden. Es ist unter Java geschrieben, funktioniert also dort, wo Java funktioniert (fast überall). Arbeitet mit Verzeichnissen und Unterverzeichnissen, sucht und ersetzt innerhalb von Dateien, kann sie auch umbenennen. Kann auch Massendateien umbenennen. Lizenz = kostenlos, sowohl für Einzelpersonen als auch für Firmen. Sehr schnell und vom Entwickler gewartet. Finden Sie es hier: http://findandreplace.sourceforge.net/

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

5
cristic

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

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

Dazu benötigen Sie entweder ein Unix-System oder eine Windows Cygwin Plattform.
Es gibt auch GnuWin32 für sed . ( Installation und Nutzung von GnuWin32 ).

5
nik
@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

Quelle . Ich hoffe, es wird jemandem helfen.

4
HBK

Das können Sie machen:

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
1
xpioneer