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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Dudas sobre Text Manipulator Routine de Elektro
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dudas sobre Text Manipulator Routine de Elektro  (Leído 2,453 veces)
ElPulga

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Dudas sobre Text Manipulator Routine de Elektro
« en: 28 Enero 2014, 21:27 pm »

Hola: Este es mi primer post aqui, hace rato lo descubri y lo leo seguido, y hoy decidi registrarme.
La duda que tengo es sobre el batch creado por Elektro para manipular texto de un archivo.

Hasta ahora solo lo he usado haciendo una llamada dentro un bat, pero esta vez necesito algo mas complejo.

si pongo dentro de mi bat:
Código:
Call :TEXTMAN I 135 "archivo" "texto"
funciona

Pero si pongo:
Código:
Call :TEXTMAN I 135 "archivo" "texto"
Call :TEXTMAN RL 237 "archivo" "texto"
obtengo un error y solo ejecuta la primera linea.
Obviamente dentro de mi archivo bat pongo el codigo tanto para I como para RL.

Es posible alguna solucion para que yo dentro de un bat llame mas de una vez a :TEXTMAN?

Gracias


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.874



Ver Perfil
Re: Dudas sobre Text Manipulator Routine de Elektro
« Respuesta #1 en: 28 Enero 2014, 21:40 pm »

Hola, he probado a llamar al método utilizando el parámetro "I" seguido del parámetro "RL" y en mi caso me funcionó, quizás sea un error muy específico :-/.

¿Te sale algún mensaje de error?
¿Puedes describir el mensaje de error?
¿Puedes mostrar el contenido exacto de la linea 237?
También sería buena idea que mostrases el script completo que estás usando para llamar al TextMan.

De todas formas aquí tienes la última versión que hice del script por si estuvieras usando una versión antigua...
Citar
Código:
@Echo OFF


:: 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
(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)
: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
(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)
:RL
(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)
:RS
(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)
: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+
(For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~%~2%% >>      "%~3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
: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%%"|@FIND "%%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)

Saludos!


« Última modificación: 28 Enero 2014, 21:41 pm por Eleкtro » En línea



ElPulga

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Dudas sobre Text Manipulator Routine de Elektro
« Respuesta #2 en: 28 Enero 2014, 21:51 pm »

La parte del codigo que llama a TEXTMAN es el siguiente:

Código:
cd %PROGRAMFILES%\Zabbix Agent\
Call :TEXTMAN I 135 "zabbix_agentd.conf" "HostMetadataItem=system.uname"
Call :TEXTMAN RL 237 "zabbix_agentd.conf" "UserParameter=specHWShort,cscript.exe /nologo "C:\Program Files\Zabbix Agent\specHWShort.vbs" "

:TEXTMAN
(SET /A "A=0", "LINE=0", "TOTAL_LINES=0")  &  (CALL :%~1 %* || (ECHO Invalid parameter & Exit /B 1)) & (GOTO:EOF)
:I
(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)
:RL
(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)

:RENAMER
(REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~1.BAK" "%TEMP%\" >NUL) & (REN "%~1.NEW" "%~nx1") & (GOTO:EOF)

La linea 237 no tiene nada, probe con RL por que no me dejaba correr 2 veces I
El error es
Código:
"))) && (CALL :RENAMER "zabbix_agentd.conf") & (GOTO:EOF) was unexpected at this
 time.

Espero que ayude.
Gracias.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.874



Ver Perfil
Re: Dudas sobre Text Manipulator Routine de Elektro
« Respuesta #3 en: 28 Enero 2014, 22:02 pm »

Segúramente el error sea por las comillas dobles, la comilla doble está reservada y debes escapar el símbolo si lo quieres utilizar dentro de un argumento:
Código
  1. Call :TEXTMAN RL 237 "zabbix_agentd.conf" "UserParameter=specHWShort,cscript.exe /nologo ^"C:\Program Files\Zabbix Agent\specHWShort.vbs^" "

Si te sigue sin funcionar prueba a escapar también el símbolo del "=" por si están afectando al FOR:
Código
  1. Call :TEXTMAN I 135 "zabbix_agentd.conf" "HostMetadataItem^=system.uname"
  2. Call :TEXTMAN RL 237 "zabbix_agentd.conf" "UserParameter^=specHWShort,cscript.exe /nologo ^"C:\Program Files\Zabbix Agent\specHWShort.vbs^" "

Y si aún así te sigue sin funcionar, deberías utilizar alguna utilidad externa como SED ~> http://gnuwin32.sourceforge.net/packages/sed.htm

PD: Imagino que despues de llamar al método estarás haciendo una pausa en el código como esto:
Código:
Call :TEXTMAN ...
Call :TEXTMAN ...
Pause

...De lo contrario, es normal que te de un error.

Saludos!
« Última modificación: 28 Enero 2014, 22:04 pm por Eleкtro » En línea



ElPulga

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Dudas sobre Text Manipulator Routine de Elektro
« Respuesta #4 en: 28 Enero 2014, 22:25 pm »

No, no funciona, me sigue tirando el mismo error y no me agrega la segunda linea.

El tema es que este archivo que estoy modificando lo hago luego de instalar un programa, si tambien tengo que instalar SED se va a complicar mas.

Ver que puedo hacer, si hay algun ejemplo mejor me ayudaria bastante.

Gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
cd-text dudas
Software
bermejo1 2 4,563 Último mensaje 17 Abril 2006, 23:02 pm
por bermejo1
[DUDAS] Todas las dudas sobre RadASD + MASM aqui « 1 2 3 »
ASM
AleX Inc. 23 22,153 Último mensaje 5 Julio 2010, 11:58 am
por Eternal Idol
Duda sobre compilar con Sublime Text 2
Programación C/C++
petrusqui 2 5,241 Último mensaje 18 Marzo 2012, 21:16 pm
por petrusqui
Dificultad VBScript [MSXML2.XMLHTTP + RESPONSE.TEXT + TEXT AREA)]
Scripting
JohnConnor 0 2,297 Último mensaje 16 Enero 2013, 12:37 pm
por JohnConnor
Sobre Sublime Text 2
Desarrollo Web
01munrra 2 3,044 Último mensaje 17 Septiembre 2013, 04:20 am
por 01munrra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines