Código:
@Echo OFF
Title TEXTCUTTER [By Elektro H@cker]
REM Call :TEXTCUTTER "ARCHIVO" "DELIMITADOR (A)" "DEIMITADOR (B)"
:: Ejemplo
Call :TEXTCUTTER "TEST.XML" "<fdaDeployJob" "</fdaDeployJob>"
Pause&Exit
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:TEXTCUTTER
Echo # # # # # # # #
Echo # #
Echo # TEXT CUTTER # by Elektro H@cker
Echo # #
Echo # # # # # # # # | MORE
Setlocal enabledelayedexpansion
Set "FILE=%~nx1"
SET "Delimiter_A=%~2"
SET "Delimiter_B=%~3"
:: Comprobaciones iniciales
If Exist "%FILE%" (
Echo # Procesar archivo : "%FILE%"
Echo # Delimitar desde : "%Delimiter_A%"
Echo # Delimitar hasta : "%Delimiter_B%" | MORE
) ELSE (Echo Archivo "%FILE%" no encontrado & GOTO:EOF)
Type "%FILE%" | FIND "%Delimiter_A%" >NUL || (Echo No se ha encontrado ninguna cadena con el delimitador (A^): "%Delimiter_A%" & GOTO:EOF)
Type "%FILE%" | FIND "%Delimiter_B%" >NUL || (Echo No se ha encontrado ninguna cadena con el delimitador (B^): "%Delimiter_B%" & GOTO:EOF)
:: Creamos un archivo temporal y le agregamos X lineas en blanco para evitar errores en el SORT de Batch.
REM Ajustamos el número de lineas a agregar para agilizar el proceso de generación de archivos.
REM 100 lineas si el archivo original tiene menos de 100 lineas.
REM 1.000 lineas si el archivo original tiene entre 100 y 999 lineas.
REM 10.000 lineas si el archivo original tiene entre 1.000 y 9.999 lineas.
REM 100.000 lineas si el archivo original tiene entre 10.000 y 99.999 lineas.
REM 1.000.000 lineas si el archivo original tiene entre 100.000 y 999.999 lineas o más de 1.000.000 de lineas.
For /F %%a in ('Type "%FILE%" ^| find /V /C ""') do (Echo %%a>"%TEMP%\%FILE%" & FOR %%? IN ("%TEMP%\%FILE%") DO (SET /A "longitud=%%~z? - 3"))
Echo+ > "%TEMP%\%FILE%"
IF "%LONGITUD%" LEQ "2" (Set /A "LINES=100")
IF "%LONGITUD%" EQU "3" (Set /A "LINES=1000")
IF "%LONGITUD%" EQU "4" (Set /A "LINES=10000")
IF "%LONGITUD%" EQU "5" (Set /A "LINES=100000")
IF "%LONGITUD%" GEQ "6" (Set /A "LINES=1000000")
Echo Generando un archivo temporal, espere...
For /L %%X in (2,1,%LINES%) Do (Echo+ >> "%TEMP%\%FILE%")
:: Eliminamos las lineas en blanco del archivo original y copiamos el resto en el archivo temporal.
Type "%FILE%" | FINDSTR "." >> "%TEMP%\%FILE%"
:: Obtenemos el número de las lineas que contienen los delimitadores [A] y [B].
For /F "Delims=:" %%X in ('findstr /I /N "%Delimiter_A%" "%TEMP%\%FILE%"') do (Set /A "NUM_A+=1" && Set "Delimiter_A_!NUM_A!=%%X")
For /F "Delims=:" %%X in ('findstr /I /N "%Delimiter_B%" "%TEMP%\%FILE%"') do (Set /A "NUM_B+=1" && Set "Delimiter_B_!NUM_B!=%%X")
:: Cortamos y generamos los archivos.
Echo+ & Echo Generando los archivos, espere... | MORE
For /L %%X in (1,1,%NUM_B%) Do (
For /F "Tokens=* Delims=:" %%@ in ('Type "%TEMP%\%FILE%"') do (
Set /A "LINE+=1"
SET "String=%%@"
IF NOT "!LINE!" GTR "!Delimiter_B_%%X!" (
IF "!LINE!" GEQ "!Delimiter_A_%%X!" (
IF NOT "!STRING!" EQU " " (
ECHO !STRING!>> "%~n1_%%X_%~x1"
)
)
)
)
Set /A "LIN_A=!Delimiter_A_%%X! - %LINES%", "LIN_B=!Delimiter_B_%%X! - %LINES%"
Set /A "LINE=0"
Echo [+] "%~n1_%%X_%~x1"
Echo (Linea !LIN_A! hasta Linea !LIN_B!^) | MORE
)
Setlocal disabledelayedexpansion
Echo Listo.
GOTO:EOF
PD: Recuerden, así pueden ocultar la salida:
Código
Espero que les séa de ayuda.
Saludos.
El archivo que he usado en el ejemplo:
Test.XML
Código
---------------------------------------------- <fdaDeployJob xml:lang="es-ES"> <fileInfo> <displayName>Plus_IMS_ARG_DDDLEG_002_A_20120801.ZIP</displayName> <description>DATOS AR_DDDPLUS Argentina Ambiente plus Agosto 2012 CLIENT SERVICE, IMSHEALTH <additionalInfo></additionalInfo> <loginRequired>0</loginRequired> <approved>1</approved> <emailNotification>1</emailNotification> <activeDate>2012/09/19</activeDate> <expirationDate>2012/10/30</expirationDate> <fileRule> <productRestrictions> </productRestrictions> <companyRestrictions> </companyRestrictions> <productCompanyRestrictions> </productCompanyRestrictions> <individualRestrictions> <individualEmail owner="1">aduran@ar.imshealth.com</individualEmail> <individualEmail owner="0">mechenique@ar.imshealth.com</individualEmail> </individualRestrictions> <fileUploader> </fileUploader> </fileRule> </fileInfo> </fdaDeployJob> ---------------------------------------------- <fdaDeployJob xml:lang="en-EN"> <fileInfo> <displayName>Plus_IMS_ELEKTRO_H@CKER.ZIP</displayName> <description>blablablabla <additionalInfo></additionalInfo> <loginRequired>0</loginRequired> <approved>1</approved> <emailNotification>1</emailNotification> <activeDate>2011/11/22</activeDate> <expirationDate>2011/11/22</expirationDate> <fileRule> <productRestrictions> </productRestrictions> <companyRestrictions> </companyRestrictions> <productCompanyRestrictions> </productCompanyRestrictions> <individualRestrictions> <individualEmail owner="1">www.elhacker.net</individualEmail> <individualEmail owner="0">Elektro H@cker</individualEmail> </individualRestrictions> <fileUploader> </fileUploader> </fileRule> </fileInfo> </fdaDeployJob> ----------------------------------------------