2009-07-12 13 views
22

Voglio creare un batch mentre trova linee specifiche in un file batch e sono in grado di modificare queste righe.Batch/Trova e modifica righe nel file TXT

Esempio:

// // TXT FILE

ex1 
ex2 
ex3 
ex4 

voglio lasciare che il file batch trovare 'EX3' e modificare questo a 'EX5' lasciarlo simile a questa:

ex1 
ex2 
ex5 
ex4 
+20

sembra chiaro se dico "BATCH" –

risposta

27

in un'installazione nativa di Windows, è possibile utilizzare batch (cmd.exe) o vbscript senza la necessità di ottenere strumenti esterni. Ecco un esempio 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  

Salva con nome myreplace.vbs e sulla riga di comando

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

Questo è il tipo di roba sed creato per (ovviamente, è necessario sed sul sistema per quello).

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

vi sia bisogno di un sistema Unix o Windows Cygwin sorta di piattaforma per questo.
C'è anche GnuWin32 for sed. (GnuWin32 installation and usage).

+0

questo è troppe cose di cui ho bisogno. Voglio impostare questo pubblico; quindi dovrebbe essere fatto facilmente. –

12

Non v'è alcuna ricerca e la funzione o la modifica flusso di sostituire alla riga di comando in XP o 2k3 (Dont conoscere la vista o oltre). Quindi, dovrai usare uno script come quello pubblicato da Ghostdog, o uno strumento capace di cercare e sostituire come sed.

C'è più di un modo per farlo, in quanto questo script mostra: esempio

@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

delle ghostdog74 fornito il nucleo di quello che mi serviva, dal momento che non ho mai scritto alcun VBS prima e bisogno di farlo . Non è perfetto, ma ho arricchito l'esempio in un copione completo nel caso qualcuno lo trovasse utile.

'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

È sempre possibile utilizzare "FAR" = "Trova e sostituisci". È scritto sotto Java, quindi funziona dove Java funziona (praticamente ovunque). Funziona con directory e sottodirectory, cerca e sostituisce all'interno dei file, inoltre può rinominarli. Inoltre, è possibile rinominare i file bulk.Licenza = gratuita, sia per gli individui che per le persone comuni. Molto veloce e gestito dallo sviluppatore. Trovalo qui: http://findandreplace.sourceforge.net/

Inoltre è possibile utilizzare GrepWin. Funziona più o meno lo stesso. Lo si può trovare qui: http://tools.tortoisesvn.net/grepWin.html

6

Se siete su Windows, è possibile utilizzare FART (F ind Un ND R eplace T ext). È solo un singolo file * .exe (non è necessaria alcuna libreria).

Tutto quello che dovete è eseguire:

fart.exe your_batch_file.bat ex3 ex5 
+2

Hanno dovuto attaccare ** T ** estendere la fine, non è vero? :) – akinuri

0

Si può fare in questo modo:

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. Sperando che possa aiutare qualcuno.

Problemi correlati