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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programaci๓n
| |-+  Scripting
| | |-+  (solucionado) [batch] error con findstr
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (solucionado) [batch] error con findstr  (Leído 5,407 veces)
shadowhunter

Desconectado Desconectado

Mensajes: 23


Ver Perfil
(solucionado) [batch] error con findstr
« en: 9 Octubre 2013, 13:49 pm »

Estoy haciendo una peque๑a utililidad que se basa principalmente en la creaci๓n y edici๓n de archivos .txt y tengo un problema con la parte de eliminar una linea concreta de un txt.

el programa primero nos muestra en pantalla el contenido del txt:



y nos da a elegir que contenido queremos eliminar, pero al escribirlo en vez de decir que se ha eliminado y volver a cargar la ventana, carga directamente y sin eliminar el contenido:



Alguien sabria decirme donde esta equivocado el codigo????

Código:
@echo off
title Animefiles 1.3.2
COLOR 70
mode con: cols=75
@set ruta1= %CD%\Files
:RETURN
CD Files
cls
echo.
echo ษอออออออออออออออออออออออป
echo บ  Eliminar un anime    บ
echo ศอออออออออออออออออออออออผ |MORE
echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
Dir /b
echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
Echo introduzca la lista de donde quiere eliminar un anime:
echo.
set/p "anime=>"
if not exist %anime%.txt goto ERROR2
if not defined anime goto RETURN
:RESETDEL
cls
echo.
echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
FOR /F "tokens=*" %%A IN (%anime%.txt) DO (echo.%%A) |MORE
echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
echo Para salir del modo, cerrar el programa. |MORE
echo Seleccione el anime a borrar:
echo.
set/p "borrar=>"
if not defined borrar goto resetdel
echo.
Type "%ruta1%\%anime%.txt" | findstr /V /I "%borrar%">"%ruta1%\%anime%.tmp"
Del /Q "%ruta1%\%anime%.txt"
Rename "%ruta1%\%anime%.tmp" "%anime%.txt"
cls
echo.
echo el anime ha sido eliminado satisfactoriamente. |MORE
pause
goto RESETDEL

:ERROR2
cls
echo ษอออออออออออป
echo บ   ERROR   บ
echo ศอออออออออออผ |MORE
echo No existe una lista con ese nombre. |MORE
pause
CD..
start Animefiles
exit


« Última modificación: 12 Octubre 2013, 13:46 pm por shadowhunter » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: [batch] error con findstr
« Respuesta #1 en: 9 Octubre 2013, 15:49 pm »

Hola

1. Esto d้jalo asํ, sin espacios delante del "=":
Código
  1. set "ruta1=.\Files"

2. Esto d้jalo asํ, encerrando la expresi๓n.
Código
  1. FOR /F "usebackq= delims=" %%A IN ("%anime%.txt") DO (Echo.%%A) | MORE

3.
Citar
Código
  1. set /p "borrar=>"
  2. if not defined code goto resetdel

No tienes ninguna variable llamada "code" en el c๓digo, asํ que siempre va a regresar a la misma etiqueta,
y por eso siempre te muestra el mismo contenido, porque no borras ninguno.


Arreglando el tercer paso (corrigiendo la condicional "If not defined") serํa suficiente para que te funcionase de la forma que necesitas.


Saludos


« Última modificación: 9 Octubre 2013, 15:53 pm por EleKtro H@cker » En línea

shadowhunter

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: [batch] error con findstr
« Respuesta #2 en: 9 Octubre 2013, 16:20 pm »

Gracias! lo de la variable code es que le habia cambiado el nombre y no me di cuenta de sustituirlo en el if.

Pero sigue sin funcionar y ahora al sustituir el for al ejecutar en vez de mostrarme el contenido me pone:

No se esperaba = delims=" en este momento.

A que se debe?
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: [batch] error con findstr
« Respuesta #3 en: 9 Octubre 2013, 16:26 pm »

No se esperaba = delims=" en este momento.

A que se debe?

Perd๓n, eso es un error por mi parte, lo escribํ al vuelo y cometํ un error de sintaxis, d้jalo asํ:

Código:
FOR /F "usebackq delims=" %%A IN ("%anime%.txt") DO (Echo.%%A) | MORE

Saludos
En línea

shadowhunter

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: [batch] error con findstr
« Respuesta #4 en: 9 Octubre 2013, 16:36 pm »

Solucionado el problema del for, pero sigue sin borrar el registro del txt sino que cierra el programa directamente.

Pongo el codigo modificado:

Código:
@echo off
title Animefiles 1.3.2
COLOR 70
mode con: cols=75
set "ruta1=.\Files"
:RETURN
CD Files
cls
echo.
echo ษอออออออออออออออออออออออป
echo บ  Eliminar un anime    บ
echo ศอออออออออออออออออออออออผ |MORE
echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
Dir /b
echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
Echo introduzca la lista de donde quiere eliminar un anime:
echo.
set/p "anime=>"
if not exist %anime%.txt goto ERROR2
if not defined anime goto RETURN
:RESETDEL
cls
echo.
echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
FOR /F "usebackq delims=" %%A IN ("%anime%.txt") DO (Echo.%%A) | MORE
echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
echo Para salir del modo, cerrar el programa. |MORE
echo Seleccione el anime a borrar:
echo.
set/p "borrar=>"
if not defined borrar goto resetdel
echo.
Type "%ruta1%\%anime%.txt" | findstr /V /I "%borrar%">"%ruta1%\%anime%.tmp"
Del /Q "%ruta1%\%anime%.txt"
Rename "%ruta1%\%anime%.tmp" "%anime%.txt"
cls
echo.
echo el anime ha sido eliminado satisfactoriamente. |MORE
pause
goto RESETDEL

:ERROR2
cls
echo ษอออออออออออป
echo บ   ERROR   บ
echo ศอออออออออออผ |MORE
echo No existe una lista con ese nombre. |MORE
pause
CD..
start Animefiles
exit

Llevo varias semanas comiendome la cabeza con este problema, sino se puede asi me vale alguna otra solucion. thaks!
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: [batch] error con findstr
« Respuesta #5 en: 9 Octubre 2013, 17:07 pm »

pero sigue sin borrar el registro del txt sino que cierra el programa directamente.

Esta modificaci๓n del c๓digo me ha funcionado corr้ctamente:

Código
  1. @Echo OFF & Color 70 & MODE con cols=75
  2. Title Animefiles 1.3.2
  3.  
  4. SET "Directory=.\Files"
  5. REM SET "Directory=.\"
  6.  
  7. :RETURN
  8. PUSHD "%Directory%" 2>NUL || (Call :ERROR "1")
  9. cls
  10. echo ษอออออออออออออออออออออออป
  11. echo บ  Eliminar un anime    บ
  12. echo ศอออออออออออออออออออออออผ                                                  |MORE
  13. echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
  14. Dir /B "*.txt"
  15. echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
  16. Echo introduzca el nombre de la lista de donde quiere eliminar un anime:
  17. set /P "File=>"
  18. If NOT Defined File (Goto :RETURN)
  19. If /I NOT "%File:~-3%" EQU "txt" (Set "File=%File%.txt")
  20. If NOT exist "%File%" (Call :ERROR "2")
  21.  
  22. :RESETDEL
  23. cls
  24. echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
  25. FOR /F "usebackq delims=" %%A IN ("%File%") DO (Echo.%%A) | MORE
  26. echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE
  27. echo Para salir del modo, cerrar el programa. |MORE
  28. echo Seleccione el anime a borrar:
  29. set/p "borrar=>"
  30. if not defined Borrar (goto :resetdel)
  31. Type "%Directory%\%File%" | Findstr /V /I "%borrar%">"%Directory%\%File%.tmp"
  32. Del /Q "%Directory%\%File%"
  33. Rename "%Directory%\%File%.tmp" "%File%"
  34. cls
  35. echo el anime ha sido eliminado satisfactoriamente. |MORE
  36. Goto :RESETDEL
  37.  
  38. :ERROR
  39. cls
  40. echo ษอออออออออออป
  41. echo บ   ERROR   บ
  42. echo ศอออออออออออผ |MORE
  43. REM Para manejar varios tipos de errores...
  44. If "%~1" EQU "1" (Echo No existe un directorio con ese nombre. |MORE)
  45. If "%~1" EQU "2" (Echo No existe una lista con ese nombre. |MORE)
  46. Start Animefiles

Si en tu caso sigue sin funcionar deberํas proporcionar un ejemplo real del archivo de "lista" (los animes que hay que borrar) y del patr๓n de b๚squeda que le pasas al comando "FindStr"

Saludos
« Última modificación: 9 Octubre 2013, 17:15 pm por EleKtro H@cker » En línea

shadowhunter

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: [batch] error con findstr
« Respuesta #6 en: 9 Octubre 2013, 17:37 pm »

Gracias por la ayuda!

Parece ser que el findstr no admitia la ruta mediante variables asi que puse la ruta directamente y funciona perfectamente:

Código:
Type "C:\Program Files\Animefiles\Files\%File%" | Findstr /V /I "%borrar%">"C:\Program Files\Animefiles\Files\%File%.tmp"
pause
Del /Q "C:\Program Files\Animefiles\Files\%File%"
Rename "C:\Program Files\Animefiles\Files\%File%.tmp" "%File%"

En verdad asi me vale ya que el programa se encuentra en una ruta estatica. Gracias por el esfuerzo y la ayuda.

Solucionado!
En línea

shadowhunter

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: [batch] error con findstr
« Respuesta #7 en: 10 Octubre 2013, 20:10 pm »

Aprovecho el tema para preguntar un par de dudas que me han surgido al analizar la simplificaci๓n del code:

La primera es que hace esta linea:
Código:
PUSHD "%Directory%" 2>NUL || (Call :ERROR "1")

Y la segunda no entiendo el funcionamiento de estos if y para que sirve POPD

Código:
:ERROR
cls
echo ษอออออออออออป
echo บ   ERROR   บ
echo ศอออออออออออผ |MORE
If "%~1" EQU "1" (Echo No existe un directorio con ese nombre. |MORE)
If "%~1" EQU "2" (Echo No existe una lista con ese nombre. |MORE)
Pause
POPD

Si alguien me puede ayudar a resolver estas dudas...
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: [batch] error con findstr
« Respuesta #8 en: 10 Octubre 2013, 21:20 pm »

En consola:

Código:
PUSDH /?
Código:
POPD /?

+ http://ss64.com/nt/syntax-redirection.html + http://ss64.com/nt/syntax-args.html

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(SOLUCIONADO) [ BATCH ] Ayuda con "findstr"... y contador « 1 2 »
Scripting
SuperDraco 10 13,869 Último mensaje 19 Marzo 2011, 00:19 am
por leogtz
[Solucionado] [Batch] Necesitarํa saber el error del c๓digo.
Scripting
sabeeee 3 3,685 Último mensaje 22 Julio 2011, 22:58 pm
por sabeeee
[BATCH] Findstr, ฟComo repetir coincidencias?
Scripting
Eleкtro 0 2,336 Último mensaje 17 Marzo 2012, 06:37 am
por Eleкtro
[BATCH] Problema al intentar poner el resultado de findstr dentro de variable
Scripting
XXLuigiMario 3 4,500 Último mensaje 17 Agosto 2012, 15:26 pm
por XXLuigiMario
(SOLUCIONADO)[Batch] Error en codigo. Ayuda!
Scripting
Fran2013 2 3,391 Último mensaje 12 Noviembre 2013, 05:40 am
por Fran2013
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines