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.