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
| | |-+  el signo =
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: el signo =  (Leído 9,684 veces)
Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
el signo =
« en: 16 Septiembre 2017, 13:49 pm »

Vengo leyendo y aprendiendo del gran post http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html

pretendo cambiar un texto por otro, en el tema citado está este código:

Citar
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type texto.txt') do (
set linea=%%x
set linea=!linea:Perl=C!
call :show !linea!
)
goto:eof
:show
echo %* >> out.txt
goto:eof

El código funciona perfecto pero tengo un problema siguiendo con ejemplo mi texto seria

Perl=CCCC

y lo que quiero eliminar es Perl= y cambiarlo por HT de tal modo que en esa linea quede HTCCCC


Con ejemplo el código sería


Citar
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type texto.txt') do (
set linea=%%x
set linea=!linea:Perl==HT!
call :show !linea!
)
goto:eof
:show
echo %* >> out.txt
goto:eof

Pero no funciona por el signo =

¿Hay manera de escribir el signo = y que lo reconozca como texto no como parte del codigo?


En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 683



Ver Perfil WWW
Re: el signo =
« Respuesta #1 en: 16 Septiembre 2017, 19:52 pm »

listo solo tienes que colocar el signo ^  para que te reconozca el = como texto.

asi:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=* delims=" %%x in ('type texto.txt') do (
  4. set linea=%%x
  5. set linea=!linea:Perl=^=ht!
  6. call :show !linea!
  7. )
  8. goto:eof
  9. :show
  10. echo %* >> out.txt
  11. goto:eof
  12.  
prueba el code a ver si es lo que quieres.


En línea



Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: el signo =
« Respuesta #2 en: 16 Septiembre 2017, 21:42 pm »

Muchas gracias por el intento, pero a mi no me funciona. Eso me cambia el texto "Perl=" por "=ht="

Debería ser solo ht quitando el signo =

Por si sirve de algo estoy con win 10
En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 683



Ver Perfil WWW
Re: el signo =
« Respuesta #3 en: 16 Septiembre 2017, 22:29 pm »

a ver, que es precisamente lo que quieres?
En línea



Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: el signo =
« Respuesta #4 en: 17 Septiembre 2017, 10:24 am »

Que el signo = del texto original desparezca

En el texto original pone:
version=85045

Quiero que se cambie version= (incluyendo el =) por HT.

Quedando el texto así: HT85045
En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 683



Ver Perfil WWW
Re: el signo =
« Respuesta #5 en: 17 Septiembre 2017, 19:18 pm »

ya lo he terminado. comenta si te funciono.

code:
Código
  1. @echo off
  2. set n=HT
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=* delims=" %%x in ('type texto.txt') do (
  5. set linea=%%x
  6. set linea=!linea:version=%n%!
  7. call :show !linea!
  8. )
  9. goto foroelhacker.net
  10.  
  11. :foroelhacker.net
  12. Setlocal EnableDelayedExpansion
  13. Mode Con Cols=100 Lines=25
  14. If Exist "%TMP%\BMCTP" (
  15. Goto Inicio
  16. ) Else (
  17. MD "%TMP%\BMCTP"
  18. Goto Inicio
  19. )
  20.  
  21. :Inicio
  22. Set Ruta=%CD%
  23. CD %Ruta%
  24.  
  25. :Nombre_Texto
  26. Echo. & Echo =======================================================
  27. Echo Escriba el nombre del archivo a modificar (Solo archivos de texto plano "txt"):
  28. Set "Archivo=out"
  29. Cls
  30. If Not Exist "%Archivo%.txt" (
  31. Cls
  32. Echo No se ha encontrado el archivo solicitado, intente nuevamente.
  33. Goto Nombre_Texto
  34. ) Else (
  35. Cls
  36. Echo Archivo encontrado.
  37. Goto Backup
  38. )
  39.  
  40. :Backup
  41. Copy /Y "%Ruta%\%Archivo%.txt" "%TMP%\BMCTP\%Archivo%_Backup.txt" >nul
  42. If Exist "%TMP%\BMCTP\%Archivo%_Backup.txt" (
  43. Echo. & Echo =======================================================
  44. Echo Backup realizado con exito.
  45. >Nul Ping -n 3 Localhost & Cls & Goto Caracter
  46. ) Else (
  47. Cls
  48. Echo Error al hacer Backup del archivo.
  49. Pause>nul
  50. Exit
  51. )
  52.  
  53. :Caracter
  54. Set Caracter=^=
  55. If "%Caracter%" == "" Cls & Echo Por favor no intente ingresar valores nulos... & Echo. & Goto Caracter
  56. Cls & >Nul Ping -n 1 Localhost
  57.  
  58. :Mod
  59. Set PosX=0
  60. For /F "Usebackq Tokens=*" %%a IN ("%Ruta%\%Archivo%.txt") Do (
  61. Set Linea=%%a
  62. Call:Buscador
  63. Set "LineaNueva="
  64. )
  65. Goto Aprobacion
  66.  
  67. :Buscador
  68. If Not "%Caracter%" == "!Linea:~%PosX%,1!" (
  69. If "!Linea:~%PosX%,1!" == "" (
  70. Set PosX=0
  71. Echo !LineaNueva!>>"%TMP%\BMCTP\Nuevo_%Archivo%.txt"
  72. Goto:Eof
  73. )
  74. Set "LineaNueva=%LineaNueva%!Linea:~%PosX%,1!"
  75. Set /A PosX+=1
  76. Goto Buscador
  77. ) Else (
  78. If "!Linea:~%PosX%,1!" == "" (
  79. Set PosX=0
  80. Echo !LineaNueva!>>"%TMP%\BMCTP\Nuevo_%Archivo%.txt"
  81. Goto:Eof
  82. )
  83. Set /A PosX+=1
  84. Goto Buscador
  85. )
  86.  
  87. :Aprobacion
  88. Goto Fin
  89.  
  90. :Fin
  91. del /f /q out.txt
  92. Cls & Echo.
  93. Copy /Y "%TMP%\BMCTP\Nuevo_%Archivo%.txt" "%Ruta%\%Archivo%.txt" >nul
  94. >Nul Ping -n 1 Localhost
  95. Del /Q "%TMP%\BMCTP" >nul
  96. Echo El archivo modificado se encuentra en : "%Ruta%".
  97. Echo El archivo Back-Up se encuentra en : "%TMP%\BMCTP".
  98. Echo. & Echo Hemos terminado!
  99. Echo. & Echo Saliendo...
  100. >Nul Ping -n 2 Localhost & Exit
  101.  
  102. :show
  103. echo %* >> out.txt
  104. goto:eof
  105.  


lo que hace es buscar en el archivo texto.txt las palabras version=85045 y te las cambia a HT85045 . justo lo que querias ,

       comenta si te funciono   ;-)
En línea



Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: el signo =
« Respuesta #6 en: 17 Septiembre 2017, 22:30 pm »

Ya lo creo que funcionó muchísimas gracias   ;-)  ;-)
Ademas es bonito y elegante. No solo me ha servido sino que voy a estudiarlo para aprender un poco mas aunque no os llego a suela del zapato.

**Aincrad** muchas gracias por tu tiempo y tu saber.
En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 683



Ver Perfil WWW
Re: el signo =
« Respuesta #7 en: 17 Septiembre 2017, 22:56 pm »

dale no es nada.  :)

si no entiendes alguna parte de el code me avisas, con gusto te lo explicare.   ;)
En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: el signo =
« Respuesta #8 en: 27 Septiembre 2017, 11:52 am »

Hola. Batch no está pensado como un lenguaje (de hecho tecnicamente no es un lenguaje de programación) para parsear archivos de texto. En tu script, estás iterando linea por linea y tratando de realizar el reemplazamiento de string en cada una de las lineas, aparte de eso en lugar de escribir de una sola vez el archivo, estás adjuntando la última linea iterada al final del archivo de texto, todo esto en términos de rendimiento/velocidad de ejecución deja mucho que desear, y el agravío lo notarías si se tratase de un archivo con varios miles de lineas...

En fin, a donde quiero llegar es que Batch está desfasado para este tipo de tareas, y hay que ir inculcando a las nuevas generaciones la forma más óptima de resolver ciertos problemas, por eso en lugar de Batch yo te sugiero utilizar PowerShell.

La solución a tu problema:

script.ps1
Código
  1. [System.Reflection.Assembly]::LoadWithPartialName("System.Text.dll")
  2.  
  3. $srcFilePath  = ".\Iput Text.txt"
  4. $dstFilePath  = ".\Output Text.txt"
  5. $textEncoding = [System.Text.Encoding]::Default
  6.  
  7. $filecontent  = [System.IO.File]::ReadAllText($srcFilePath, $textEncoding)
  8. $replacedText = ($filecontent).Replace("Perl=", "HT")
  9.  
  10. [System.IO.File]::WriteAllText($dstFilePath, $replacedText, $textEncoding)
  11.  
  12. Write-Host $replacedText
  13. Exit(0)

Saludos.
« Última modificación: 27 Septiembre 2017, 13:22 pm por Eleкtro » En línea



Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: el signo =
« Respuesta #9 en: 27 Septiembre 2017, 23:03 pm »

Muchas gracias Elektro.
Mi problema es tengo una base muy pequeña con batch y pese a que no entiendo la mayoría de las cosas fuera de los comandos simples, con la lectura en el foro y copiando los aportes de otros usuarios soy capaz de construir algo medianamente funcional que seguro no es nada correcto pero llega a funcionar. De otro modo lo que tu presentas para mi es totalmente desconocido.

Mi desconocimiento es tal que todavía no soy capaz de saber como es posible que el código del compañero funcione y me quite los signos "=" así que imagina la importancia que para mi pueden tener unos segundos mas o menos cuando antes no podía hacerlo correr de ningún modo.

Te reirías si supieras los meses que llevo dando vueltas al código tratando de hacerlo por mi cuenta y para tener algo que mostrar a la hora de preguntar, para mi ya solo con que me quite los signos de = es un triunfo de muchas horas de trabajo por mi incapacidad en este terreno pero voy aprendiendo.

Entiendo que es un código obsoleto y que hay otras opciones mas actuales y mejores, pero si tengo que ir a algún sitio y me das la opción de conducir en mi coche viejo o en el deportivo mas potente y mas moderno elegiré el coche viejo que aunque no soy piloto se como conducirlo mas o menos.

Si que te agradeceré algún enlace donde poder iniciarme en Power Shell porque me gusta aprender y ademas que me indiques como hago uso de lo que propones, quiero decir... copio el código lo pego en un archivo de texto y que extensión debo ponerle.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mostrar el signo zodiacal
PHP
:ohk<any> 3 5,071 Último mensaje 14 Enero 2010, 17:22 pm
por dimitrix
valores sin signo
Programación Visual Basic
leliCabello 3 2,519 Último mensaje 9 Noviembre 2010, 16:34 pm
por leliCabello
Signo Exclamación en Acceso a red
Redes
ftejada 1 2,140 Último mensaje 14 Septiembre 2014, 15:10 pm
por Markul
signo de ohms en mysql
Desarrollo Web
basickdagger 3 2,979 Último mensaje 28 Septiembre 2016, 18:48 pm
por engel lex
Signo Zodiacal
Programación C/C++
Thorx Show! 1 1,867 Último mensaje 25 Mayo 2019, 08:17 am
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines