elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Ayuda Script batch/powershell
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda Script batch/powershell  (Leído 4,519 veces)
ruvenhr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Ayuda Script batch/powershell
« 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:

Código
  1. @echo off
  2. echo Creando Nuevo archivo...
  3. 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


« Última modificación: 12 Junio 2013, 11:44 am por EleKtro H@cker » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Ayuda Script batch/powershell
« Respuesta #1 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:
Código
  1. TextMan.bat SR 1 14 "kk.txt"    

Saludos!





TextMan.bat:
Código
  1. @Echo OFF
  2.  
  3.  
  4. :: TEXT MANIPULATOR ROUTINE v0.5
  5. :: by Elektro H@cker
  6.  
  7.  
  8. REM SYNTAX:
  9. ::
  10. :: TEXTMAN [ACTION] [LINE(S)] [FILE] [TEXT]
  11. ::
  12. :: * [LINE(S)] parameter is Optional for some actions
  13. :: * [TEXT] parameter is Optional for some actions
  14.  
  15.  
  16. REM ACTIONS:
  17. ::
  18. ::  AB  = ADD_BEGINNING      * Add text to the beginning of a line.
  19. ::  AE  = ADD_ENDING         * Add text to the end of a line.
  20. ::  E   = ERASE              * Delete a line.
  21. ::  I   = INSERT             * Add a empty line (Or a line with text).
  22. ::  RL  = REPLACE_LINE       * Replace a entire line.
  23. ::  RS  = REPLACE_STRING     * Replace word from line.
  24. ::  RSA = REPLACE_STRING_ALL * Replace word from all lines.
  25. ::  C+  = CHARACTER_PLUS     * Delete the first "X" characters from all lines.
  26. ::  C-  = CHARACTER_LESS     * Delete the last  "X" characters from all lines.
  27. ::  L+  = LINE_PLUS          * Cut the first "X" amount of lines.
  28. ::  L-  = LINE_LESS          * Cut the last  "X" amount of lines.
  29. ::  GL  = GET_LINE           * Delete all except "X" line.
  30. ::  GR  = GET_RANGE          * Delete all except "X" range of lines.
  31.  
  32.  
  33. REM EXAMPLES:
  34. ::
  35. :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
  36. ::                                                                         ::
  37. :: Delete the line 3                                                       ::
  38. :: Call :TEXTMAN E 3 "Test.txt"                                            ::
  39. ::                                                                         ::                                                                        
  40. :: Add a string to the beginning of line 3                                 ::
  41. :: Call :TEXTMAN AL 3 "Test.txt" "Elektro H@cker"                          ::
  42. ::                                                                         ::                                                                      
  43. :: Add a string to the end of line 3.                                      ::
  44. :: Call :TEXTMAN AR 3 "Test.txt" "Elektro H@cker"                          ::
  45. ::                                                                         ::                                                                      
  46. :: Add a empty line at line 3.                                             ::
  47. :: Call :TEXTMAN I 3 "Test.txt"                                            ::
  48. ::                                                                         ::                                                                      
  49. :: Add a line with a word at line 3.                                       ::
  50. :: Call :TEXTMAN I 3 "Test.txt" "Elektro H@cker"                           ::
  51. ::                                                                         ::    
  52. :: Replace the line 3 with "Elektro H@cker".                               ::
  53. :: Call :TEXTMAN RL 3 "Test.txt" "Elektro H@cker"                          ::
  54. ::                                                                         ::
  55. :: Replace the words "Elektro" to "H@cker" in line 3.                      ::
  56. :: Call :TEXTMAN RS 3 "Test.txt" "Elektro" "H@cker"                        ::
  57. ::                                                                         ::
  58. :: Replace the words "Elektro" to "H@cker" in all lines.                   ::
  59. :: Call :TEXTMAN RSA "Test.txt" "Elektro" "H@cker"                         ::
  60. ::                                                                         ::
  61. :: Delete the first 3 characters in all lines.                             ::
  62. :: Call :TEXTMAN C+ 3 "Test.txt"                                           ::
  63. ::                                                                         ::
  64. :: Delete the last 3 characters in all lines.                              ::
  65. :: Call :TEXTMAN C- 3 "Test.txt"                                           ::
  66. ::                                                                         ::
  67. :: Delete the first 3 lines.                                               ::
  68. :: Call :TEXTMAN L+ 3 "Test.txt"                                           ::
  69. ::                                                                         ::
  70. :: Delete the last 3 lines.                                                ::
  71. :: Call :TEXTMAN L- 3 "Test.txt"                                           ::
  72. ::                                                                         ::
  73. :: Delete all except the line number 3.                                    ::
  74. :: Call :TEXTMAN SL 3 "Test.txt"                                           ::
  75. ::                                                                         ::
  76. :: Delete all except the 3 to 9 range of lines.                            ::
  77. :: Call :TEXTMAN SR 3 9 "Test.txt"                                         ::
  78. ::                                                                         ::
  79. :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
  80.  
  81.  
  82. :TEXTMAN
  83. (SET /A "A=0", "LINE=0", "TOTAL_LINES=0")  &  (CALL :%~1 %* || (ECHO Invalid parameter & Exit /B 1)) & (GOTO:EOF)
  84. :AB
  85. (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 (if "%%B" EQU "" ((Echo %~4)>> "%~3.NEW") ELSE ((Echo %~4%%B)>> "%~3.NEW"))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  86. :AE
  87. (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)
  88. :E
  89. (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)
  90. :I
  91. (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF     "%%LINE%%" EQU "%~2" (IF NOT "%~4" EQU "" ((Echo %~4) >> "%~3.NEW") ELSE (Echo+>> "%~3.NEW"))" & (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW"))))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  92. :RL
  93. (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 %~4)>> "%~3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  94. :RS
  95. (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 (CALL SET "STRING=%%B" &&     (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((CALL ECHO %%STRING:%~4=%~5%%)>> "%~3.NEW")))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  96. :RSA
  97. (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)
  98. :C+
  99. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~%~2%% >>      "%~3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  100. :C-
  101. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~0,-%~2%% >>   "%~3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  102. :L+
  103. (Call SET /A "A=%~2") && (Call TYPE "%~3" |@MORE +%%A%% > "%~3.NEW") && (CALL :RENAMER "%~3") & (GOTO:EOF)
  104. :L-
  105. (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"))
  106. :GL
  107. (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)))
  108. :GR
  109. (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)))))
  110.  
  111. :RENAMER
  112. (REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~1.BAK" "%TEMP%\" >NUL) & (REN "%~1.NEW" "%~nx1") & (GOTO:EOF)


En línea

ruvenhr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda Script batch/powershell
« Respuesta #2 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 :)
En línea

ruvenhr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda Script batch/powershell
« Respuesta #3 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
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Ayuda Script batch/powershell
« Respuesta #4 en: 12 Junio 2013, 12:56 pm »

Entonces usa esto:

Código
  1. @Echo OFF
  2. Setlocal enabledelayedexpansion
  3.  
  4. FOR /F "Usebackq Tokens=*" %%@ IN ("1.txt") DO (
  5. Set /A "Line+=1"
  6. If not !Line! GTR 14 (Echo %%@)
  7. )
  8.  
  9. Pause&Exit

Saludos
En línea

ruvenhr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda Script batch/powershell
« Respuesta #5 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
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Ayuda Script batch/powershell
« Respuesta #6 en: 12 Junio 2013, 13:24 pm »

Es muy sencillo:

Código
  1. @Echo OFF
  2. Setlocal enabledelayedexpansion
  3.  
  4. Set "File=kk.txt"
  5. Set /A "Cut=14" & REM Las lineas que queremos conservar, desde abajo.
  6.  
  7. FOR /F %%@ IN ('Type "%File%" ^| Find /v /c ""') DO (Set /A "Length=%%@-%Cut%")
  8.  
  9. for /f "tokens=1* delims=]" %%A in ('Type "%File%" ^| Find /n /v ""') do (
  10. Set /A "Line+=1"
  11. If !Line! GTR %length% (Echo %%B)
  12. )
  13.  
  14. Pause&Exit

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:

Código
  1. Tail.exe --lines=14 "kk.txt"
(Con eso consigues hacer lo mismo que hace mi último script)

Saludos
En línea

ruvenhr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda Script batch/powershell
« Respuesta #7 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



Código:
@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.  ;-)
« Última modificación: 13 Junio 2013, 09:52 am por ruvenhr » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Ayuda Script batch/powershell
« Respuesta #8 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:

Código:
@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!
En línea

ruvenhr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda Script batch/powershell
« Respuesta #9 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Modificar nombre de las interfaces de red en windows via CMD o PowerShell
Redes
Daxx13 2 2,488 Último mensaje 2 Diciembre 2013, 18:06 pm
por Daxx13
[BATCH] Necessito ayuda URGENTE ! SCRIPT BATCH !!
Scripting
wescker 0 2,204 Último mensaje 26 Noviembre 2016, 19:41 pm
por wescker
Ayuda con Script de limpieza en PowerShell!!!!!!!
Scripting
_stevz 1 2,029 Último mensaje 10 Enero 2017, 10:54 am
por _stevz
[BATCH-SCRIPT] Necesitaria Ayuda en script en batch .
Scripting
PaKun 1 2,606 Último mensaje 1 Mayo 2019, 00:18 am
por **Aincrad**
Ayuda de powershell para operaciones dentro de Batch
Scripting
rafaeljoseyepez 1 2,432 Último mensaje 22 Junio 2020, 02:51 am
por EdePC
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines