script examples example commands batch batch-file find edit text-files lines

batch-file - examples - script batch file commands



Lote/Buscar y editar lĂ­neas en archivo TXT (8)

Quiero crear un lote mientras encuentre líneas específicas en un archivo por lotes y pueda editar estas líneas.

Ejemplo:

// ARCHIVO TXT //

ex1 ex2 ex3 ex4

Quiero que el archivo por lotes encuentre ''ex3'' y lo edite a ''ex5'' para que se vea así:

ex1 ex2 ex5 ex4


El ejemplo de ghostdog74 proporcionó el núcleo de lo que necesitaba, ya que nunca antes había escrito vbs y necesitaba hacerlo. No es perfecto, pero desarrollé el ejemplo en un guión completo en caso de que alguien lo encuentre útil.

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


Este es el tipo de cosas para las que sed se creó (por supuesto, necesitas sed en tu sistema para eso).

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

Necesitarás un sistema Unix o una plataforma tipo Windows Cygwin para esto.
También hay GnuWin32 para sed . ( Instalación y uso de GnuWin32 ).


No hay función de búsqueda y reemplazo ni edición de flujo en la línea de comando en XP o 2k3 (no se conoce la vista o más). Por lo tanto, deberá usar un script como el que publicó Ghostdog, o una herramienta capaz de buscar y reemplazar como sed.

Hay más de una forma de hacerlo, ya que este script muestra:

@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


Puedes hacer así:

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


Si está en Windows, puede usar FART ( F ind y R eplace T ext). Es solo 1 archivo single * .exe (no se necesita biblioteca).

Todo lo que necesitas es ejecutar:

fart.exe your_batch_file.bat ex3 ex5


Siempre puede usar "FAR" = "Buscar y reemplazar". Está escrito en Java, por lo que funciona donde funciona Java (prácticamente en todas partes). Funciona con directorios y subdirectorios, busca y reemplaza dentro de archivos, también puede cambiarles el nombre. También puede cambiar el nombre de los archivos masivos.Licencia = gratis, tanto para individuos como para compañías. Muy rápido y mantenido por el desarrollador. Encuéntrelo aquí: http://findandreplace.sourceforge.net/

También puedes usar GrepWin. Funciona más o menos igual. Puede encontrarlo aquí: http://tools.tortoisesvn.net/grepWin.html


en una instalación nativa de Windows, puede usar lotes (cmd.exe) o vbscript sin la necesidad de obtener herramientas externas. he aquí un ejemplo en 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

guardar como myreplace.vbs y en la línea de comando

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


@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 Esperando que ayude a alguien.