file - valores - Extrae parte de un archivo de texto usando lote dos
leer y mostrar archivo de texto en php (4)
Aquí hay una forma de hacerlo cuando "wordA" y "wordB" no están en la misma línea. Envía salida a Output.txt. Ese será el texto entre la primera "palabra A" y la primera "palabra B" en el archivo de entrada (distingue entre mayúsculas y minúsculas). No especificó qué hacer si hay conjuntos de palabra A / B múltiples (o no coincidentes).
: RemoveWordB reemplaza "wordB" con un carácter que no esperamos en el texto que luego usaremos como delimitador (`en este caso). usa otro personaje si es necesario.
@ECHO OFF
SET InFile=Test.txt
SET OutFile=Output.txt
IF EXIST "%OutFile%" DEL "%OutFile%"
SET TempFile=Temp.txt
IF EXIST "%TempFile%" DEL "%TempFile%"
FOR /F "tokens=*" %%A IN (''FINDSTR /N "wordA" "%InFile%"'') DO (
CALL :RemovePrecedingWordA "%%A"
FOR /F "tokens=1 delims=:" %%B IN (''ECHO.%%A'') DO (
MORE +%%B "%InFile%"> "%TempFile%"
FINDSTR /V "wordB" "%TempFile%">> "%OutFile%"
FOR /F "tokens=*" %%C IN (''FINDSTR "wordB" "%InFile%"'') DO (
CALL :RemoveWordB "%%C"
IF EXIST "%TempFile%" DEL "%TempFile%"
GOTO :eof
)
)
)
GOTO :eof
:RemovePrecedingWordA
SET String=%~1
SET String=%String:*wordA =%
ECHO.%String%> "%OutFile%"
GOTO :eof
:RemoveWordB
REM Replace "wordB" with a character that we don''t expect in text that we will then use as a delimiter (` in this case)
SET LastLine=%~1
SET LastLine=%LastLine:wordB=`%
FOR /F "tokens=1 delims=`" %%A IN (''ECHO.%LastLine%'') DO ECHO.%%A>> "%OutFile%"
GOTO :eof
Tengo un archivo de texto y me interesa tener solo una parte, todo lo que se incluye entre wordA y wordB
¿Es posible usar un archivo de dos por lotes? muchas gracias.
Aquí hay una manera de hacerlo. Suponiendo que la palabra A y la palabra B están en la misma línea (ambas deben estar presentes). La subrutina: FindString elimina el texto anterior no deseado y luego reemplaza "wordB" con un carácter que no esperamos en el texto que luego usaremos como delimitador (`en este caso). usa otro personaje si es necesario.
@ECHO OFF
SET InFile=Test.txt
FOR /F "tokens=*" %%A IN (''FINDSTR "wordA" "%InFile%" ^| FINDSTR "wordB"'') DO CALL :FindString "%%A"
pause
GOTO :eof
:FindString
SET String=%~1
SET String=%String:*wordA =%
SET String=%String: wordB=`%
FOR /F "tokens=1 delims=`" %%A IN (''ECHO.%String%'') DO ECHO.%%A]
GOTO :eof
Esto utiliza un archivo de lote auxiliar llamado repl.bat
desde - http://www.dostips.com/forum/viewtopic.php?f=3&t=3855
Coloque repl.bat
en la misma carpeta que el archivo por lotes.
@echo off
type infile |repl ".*wordA(.*)wordB.*" "$1" >outfile
Me pueden llamar para pedir aclaraciones, pero ... ¿Cuál de los 2 archivos que proporcionó es el archivo con el que está trabajando? Tampoco es un archivo de texto. ¿Qué es exactamente "palabraA" y "palabraB"?