Título: Ayuda Script batch/powershell
Publicado por: ruvenhr en 12 Junio 2013, 11:22 am
Hola buenas, Primero decir que me encana este foro, siempre cuando busco algo acabo dando vueltas por aqui jajaja :D Mercii a todos ;-) ;-) Ahora una pregunta que tengo sobre los scripts: En el trabajo me han dado la tarea de crear un archivo de text (.txt) a partir de un archivo que se crea automaticamente (copia de seguridad de robocopy). Teniendo el archivo de robocopy (en adelante kk.txt) y querer extraer una parte del texto a un nuevo fichero (en adelante salidakk.txt) preferiblemente en batch? Necesito extraer las primeras 14 lineas, después hay una separación de guiones (-------------). Aparecen los datos que no necesito y al acabar esos datos aparece otra separación por guiones. Finalmente aparece un pequeño resumen sobre como ha ido la copia: Total de archivos, errores, velocidades, tamaños... Esto también lo necesito extraer. Mis pruebas (en batch) me han llevado al siguiente resultado: echo Creando Nuevo archivo... findstr "ROBOCOPY Total Directorios Bytes Velocidad" kk.txt >>salidakk.txt
Pero me extrae tambien algunos datos del centro del archivo (entre la separacion de los guiones). Que podria intentar? Muchas gracias de antelación ;D
Título: Re: Ayuda Script batch/powershell
Publicado por: Eleкtro en 12 Junio 2013, 11:48 am
Hola, Antes de nada, haz el favor de leer mi firma. Y prueba a usar el siguiente script, de esta manera: TextMan.bat SR 1 14 "kk.txt"
Saludos! TextMan.bat: :: TEXT MANIPULATOR ROUTINE v0.5 :: by Elektro H@cker REM SYNTAX: :: :: TEXTMAN [ACTION] [LINE(S)] [FILE] [TEXT] :: :: * [LINE(S)] parameter is Optional for some actions :: * [TEXT] parameter is Optional for some actions REM ACTIONS: :: :: AB = ADD_BEGINNING * Add text to the beginning of a line. :: AE = ADD_ENDING * Add text to the end of a line. :: E = ERASE * Delete a line. :: I = INSERT * Add a empty line (Or a line with text). :: RL = REPLACE_LINE * Replace a entire line. :: RS = REPLACE_STRING * Replace word from line. :: RSA = REPLACE_STRING_ALL * Replace word from all lines. :: C+ = CHARACTER_PLUS * Delete the first "X" characters from all lines. :: C- = CHARACTER_LESS * Delete the last "X" characters from all lines. :: L+ = LINE_PLUS * Cut the first "X" amount of lines. :: L- = LINE_LESS * Cut the last "X" amount of lines. :: GL = GET_LINE * Delete all except "X" line. :: GR = GET_RANGE * Delete all except "X" range of lines. REM EXAMPLES: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: Delete the line 3 :: :: Call :TEXTMAN E 3 "Test.txt" :: :: :: :: Add a string to the beginning of line 3 :: :: Call :TEXTMAN AL 3 "Test.txt" "Elektro H@cker" :: :: :: :: Add a string to the end of line 3. :: :: Call :TEXTMAN AR 3 "Test.txt" "Elektro H@cker" :: :: :: :: Add a empty line at line 3. :: :: Call :TEXTMAN I 3 "Test.txt" :: :: :: :: Add a line with a word at line 3. :: :: Call :TEXTMAN I 3 "Test.txt" "Elektro H@cker" :: :: :: :: Replace the line 3 with "Elektro H@cker". :: :: Call :TEXTMAN RL 3 "Test.txt" "Elektro H@cker" :: :: :: :: Replace the words "Elektro" to "H@cker" in line 3. :: :: Call :TEXTMAN RS 3 "Test.txt" "Elektro" "H@cker" :: :: :: :: Replace the words "Elektro" to "H@cker" in all lines. :: :: Call :TEXTMAN RSA "Test.txt" "Elektro" "H@cker" :: :: :: :: Delete the first 3 characters in all lines. :: :: Call :TEXTMAN C+ 3 "Test.txt" :: :: :: :: Delete the last 3 characters in all lines. :: :: Call :TEXTMAN C- 3 "Test.txt" :: :: :: :: Delete the first 3 lines. :: :: Call :TEXTMAN L+ 3 "Test.txt" :: :: :: :: Delete the last 3 lines. :: :: Call :TEXTMAN L- 3 "Test.txt" :: :: :: :: Delete all except the line number 3. :: :: Call :TEXTMAN SL 3 "Test.txt" :: :: :: :: Delete all except the 3 to 9 range of lines. :: :: Call :TEXTMAN SR 3 9 "Test.txt" :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :TEXTMAN (SET /A "A=0", "LINE=0", "TOTAL_LINES=0" ) & (CALL : %~1 %* || (ECHO Invalid parameter & Exit /B 1 )) & (GOTO:EOF ) :AB :AE (For /F "tokens=1* delims=]" %%A in ('type " %~3" ^| find /n /v ""' ) DO (Call Set /A "LINE+=1" && (CMD /C " IF NOT " %%LINE%%" EQU "%~2" (if " %%B" EQU "" (Echo+ >> " %~3.NEW" ) ELSE ((Echo %%B)>> " %~3.NEW" )) ELSE ((Echo %%B%~4 )>> " %~3.NEW" )" ))) && (CALL : RENAMER " %~3" ) & (GOTO:EOF ) :E (For /F "tokens=1* delims=]" %%A in ('type " %~3" ^| find /n /v ""' ) DO (Call Set /A "LINE+=1" && (CMD /C " IF NOT " %%LINE%%" EQU "%~2" (if " %%B" EQU "" (Echo+ >> " %~3.NEW" ) ELSE ((Echo %%B) >> " %~3.NEW" ))" ))) && (CALL : RENAMER " %~3" ) & (GOTO:EOF ) :I :RL :RS :RSA (For /F "tokens=1* delims=]" %%A in ('type " %~2" ^| find /n /v ""' ) DO (CALL SET "STRING= %%B" && (if " %%B" EQU "" (Echo+ >> " %~2.NEW" ) ELSE ((CALL ECHO %%STRING:%~3= %~4%%)>>"%~2.NEW" )))) && (CALL : RENAMER " %~2" ) & (GOTO:EOF ) :C+ :C- (For /F "usebackq tokens=*" %%@ in (" %~3" ) DO (Call Set "LINE= %%@" && (CALL ECHO %%LINE:~0,-%~2 %% >> " %~3.NEW" ))) && (CALL : RENAMER " %~3" ) & (GOTO:EOF ) :L+ (Call SET /A "A= %~2" ) && (Call TYPE " %~3" |@MORE + %%A%% > "%~3.NEW" ) && (CALL : RENAMER " %~3" ) & (GOTO:EOF ) :L- (For /F "tokens=1* delims=]" %%A in ('type " %~3" ^| find /n /v ""' ) DO (CALL SET /A "TOTAL_LINES+=1" )) & (CALL SET /A "TOTAL_LINES-= %~2-1" ) & (For /F "tokens=1* delims=]" %%A in ('type " %~3" ^| find /n /v ""' ) DO (Call Set /A "LINE+=1" & Call echo " %%LINE%%!!|@%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF ) || (Echo %%B >> " %~3.NEW" )) :GL (Call SET /A "A= %~2" && Call SET /A "A-=1" ) && (Call TYPE " %~3" |@MORE + %%A%% > "%temp %\getline.tmp") && (For /F "tokens=1* delims=]" %%A in ('type " %temp%\getline.tmp" ^| find /n /v ""' ) DO ((if " %%B" EQU "" (Echo+ >> " %~3.NEW" ) ELSE ((Echo %%B)> " %~3.NEW" ))) && ((CALL : RENAMER " %~3" ) & (GOTO:EOF ))) :GR (For /F "tokens=1* delims=]" %%A in ('type " %~4" ^| find /n /v ""' ) DO (Call Set /A "LINE+=1" && (CMD /C " (IF " %%LINE%%" GEQ "%~2" IF " %%LINE%%" LEQ "%~3" (if " %%B" EQU "" (Echo+ >> " %~4.NEW" ) ELSE ((Echo %%B)>> " %~4.NEW" ))) && (IF " %%LINE%%" EQU "%~3" Exit /B 1 )" || ((CALL : RENAMER " %~4" ) & (GOTO:EOF ))))) :RENAMER (REN " %~1" " %~nx1.BAK" ) & (MOVE /Y " %~1.BAK" " %TEMP%\" >NUL) & (REN " %~1.NEW" " %~nx1" ) & (GOTO:EOF )
Título: Re: Ayuda Script batch/powershell
Publicado por: ruvenhr en 12 Junio 2013, 11:52 am
Hoola,
Muchas gracias y lo siento por lo del código lo he leído tarde.
Ahora probare el código con TextMan y cuento como va.
Muchas gracias y de verdad perdón por lo del código :)
Título: Re: Ayuda Script batch/powershell
Publicado por: ruvenhr en 12 Junio 2013, 12:35 pm
Hoola de nuevo ;D
Gracias por el código pero no consigo hacerlo funcionar, no me edita el kk.txt ni me crea ningún archivo nuevo, pero cuando lo hace lo hace al revés.
Me crea un nuevo archivo con el texto que hay entre las lineas separadoras de guiones.
También tarda un rato en funcionar ya que son 95.000 lineas de txt jajaja
Mercii
Título: Re: Ayuda Script batch/powershell
Publicado por: Eleкtro en 12 Junio 2013, 12:56 pm
Entonces usa esto: FOR /F "Usebackq Tokens=*" %%@ IN ("1.txt" ) DO ( )
Saludos
Título: Re: Ayuda Script batch/powershell
Publicado por: ruvenhr en 12 Junio 2013, 13:01 pm
Vale perfecto, editando el numero de lineas y creando un nuevo archivo me lo ha extraído perfecto.
Ahora la pregunta que no me sabe contestar nadie, para hacer lo mismo desde el final?
El principal problema es que el archivo kk.txt no tiene siempre el mismo tamaño de lineas.
Así que no se puede restar las lineas de X, porque X siempre va a ser diferente.
Muchas gracias de verdad :D
Título: Re: Ayuda Script batch/powershell
Publicado por: Eleкtro en 12 Junio 2013, 13:24 pm
Es muy sencillo: Set /A "Cut=14" & REM Las lineas que queremos conservar, desde abajo. FOR /F %%@ IN ('Type " %File%" ^| Find /v /c ""' ) DO (Set /A "Length= %%@- %Cut%" ) for /f "tokens=1* delims=]" %%A in ('Type " %File%" ^| Find /n /v ""' ) do ( )
PD1: ten en cuenta que ninguna línea empiece con el caracter: "]" PD2: Para una mayor eficacia primero deberías hacerle un "reverse" el archivo de texto (darle la vuelta para que las lineas de abajo queden arriba del todo, y así se procesan primero) y usar el primer script en lugar de este último. Hay muchas aplicaciones commandline para manejar archivos de texto y efectuar todo tipo de acciones... una de ellas es Tail: Tail.exe --lines=14 "kk.txt"
(Con eso consigues hacer lo mismo que hace mi último script) Saludos
Título: Re: Ayuda Script batch/powershell
Publicado por: ruvenhr en 13 Junio 2013, 09:47 am
Hoola bueno días, Lo siento por dejar ayer de contestar de golpe, pero en la oficina entro un gran imprevisto y tuve que dejarlo todo. Antes de nada muchísimas gracias, ya tengo el script creado y funcionando, siguiendo tus pasos e investigando un poco al final funciona :) Ahora ya que el ordenador coja el solo los datos ;D jajaja Dejo el codigo esta vez bien insertado jajja @echo off & setLocal enableDELAYedeXpansion title: Extraer Datos kk.txt set N= echo extrayendo datos principio for /f "tokens=* delims= " %%a in (kk.txt) do ( set /a N+=1 if !N! gtr 10 goto :done >> salidakk.txt echo.%%a ) :done cls echo extrayendo datos final for /f "tokens=* delims= " %%a in (kk.txt) do ( set var8=!var7! set var7=!var6! set var6=!var5! set var5=!var4! set var4=!var3! set var3=!var2! set var2=!var1! set var1=!var! set var=%%a ) echo !var8! >> salidakk.txt echo !var7! >> salidakk.txt echo !var6! >> salidakk.txt echo !var5! >> salidakk.txt echo !var4! >> salidakk.txt echo !var3! >> salidakk.txt echo !var2! >> salidakk.txt echo !var1! >> salidakk.txt echo !var! >> salidakk.txt cls echo Datos Extraidos a salidakk.txt
pause
por si a alguien le pudiera servir. Resumiendo: Cojer los primeros datos y los ultimos del archivo creado por ROBOCOPY. Muchisimas gracias otra vez. ;-)
Título: Re: Ayuda Script batch/powershell
Publicado por: Eleкtro en 13 Junio 2013, 17:46 pm
Le puedes hacer algunas PEQUEÑAS mejoras al code que has mostrado, prueba a usarlo de esta manera: @echo off & setLocal enableDELAYedeXpansion Title Extraer Datos kk.txt
echo extrayendo datos principio
(for /f "usebackq delims=" %%a in ("kk.txt") do ( set /a N+=1 if !N! gtr 10 (goto :done) Echo %%a ))> "salidakk.txt"
:done cls echo extrayendo datos final
for /f "usebackq delims=" %%a in ("kk.txt") do ( set "var8=!var7!" set "var7=!var6!" set "var6=!var5!" set "var5=!var4!" set "var4=!var3!" set "var3=!var2!" set "var2=!var1!" set "var1=!var!" set "var=%%a" )
(For /L %%X in (1,1,8) Do (Echo !Var%%X!))>>"salidakk.txt"
cls echo Datos Extraidos a salidakk.txt
Pause&Exit Saludos!
Título: Re: Ayuda Script batch/powershell
Publicado por: ruvenhr en 17 Junio 2013, 10:39 am
Hoola buenaas,
Enserio muchas gracias, no tengo palabras, el mejor sin duda.
aunque aun le tengo que pillar un poco el truco al nuevo script jaja funciona de 10.
No se que decir, simplemente recomendable 100% y perfecto todo. ;D
Muchas gracias de nuevo. :D
Saludos.
|