2009-07-12 22 views
22

Je souhaite créer un lot tout en recherchant des lignes spécifiques dans un fichier de traitement par lots et en modifiant ces lignes.Lots/Rechercher et modifier des lignes dans un fichier TXT

Exemple:

// TXT // FICHIER

ex1 
ex2 
ex3 
ex4 

je veux laisser le fichier batch trouver 'EX3' et modifier pour 'EX5' de le laisser ressembler à ceci:

ex1 
ex2 
ex5 
ex4 
+20

il semble clair si je dis «BATH» –

Répondre

27

Lors d'une installation Windows native, vous pouvez utiliser batch (cmd.exe) ou vbscript sans avoir besoin d'outils externes. est ici un exemple dans 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  

Enregistrer sous myreplace.vbs et sur la ligne de commande

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

C'est le genre de choses que sed a été fait pour (bien sûr, vous avez besoin de sed sur votre système pour cela).

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

Vous aurez soit besoin d'un système Unix ou une sorte de Windows Cygwin de plate-forme pour cela.
Il existe également GnuWin32 for sed. (GnuWin32 installation and usage).

+0

c'est trop de choses dont j'ai besoin. Je veux mettre ce public; donc cela devrait être fait facilement. –

12

Il n'y a pas de recherche et de remplacer la fonction ou la modification des cours d'eau à la ligne de commande dans XP ou 2K3 (Do not savoir à propos de Vista ou au-delà). Donc, vous devrez utiliser un script comme celui que Ghostdog a posté, ou un outil capable de chercher et remplacer tel que sed.

Il y a plus d'une façon de le faire, comme ce script montre:

@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

exemple de ghostdog74 fourni au cœur de ce que je avais besoin, puisque je ne l'ai jamais écrit de vbs avant et avais besoin de faire . Ce n'est pas parfait, mais j'ai étoffé l'exemple en un script complet au cas où quelqu'un le trouverait 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

Vous pouvez toujours utiliser "FAR" = "Rechercher et remplacer". Il est écrit sous Java, donc ça fonctionne là où Java fonctionne (à peu près partout). Fonctionne avec les répertoires et sous-répertoires, recherche et remplace dans les fichiers, peut également les renommer. Peut également renommer les fichiers en vrac. Licence = gratuit, pour les individus ou les comapnies. Très rapide et maintenu par le développeur. Trouvez-le ici: http://findandreplace.sourceforge.net/

Vous pouvez également utiliser GrepWin. Fonctionne à peu près pareil. Vous pouvez le trouver ici: http://tools.tortoisesvn.net/grepWin.html

6

Si vous êtes sous Windows, vous pouvez utiliser FART (F ind A e R eplace T ext). Ce n'est qu'un seul fichier * .exe (aucune bibliothèque nécessaire).

Tout ce que vous devez est exécuté:

fart.exe your_batch_file.bat ex3 ex5 
+2

Ils devaient coller ** T ** ext la fin, n'est-ce pas? :) – akinuri

0

Vous pouvez faire comme ceci:

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. En espérant que cela aidera quelqu'un.

Questions connexes