Título: (solucionado) [batch] error con findstr
Publicado por: shadowhunter 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: (http://imageshack.us/a/img585/1629/hg02.png) 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: (http://imageshack.us/a/img823/7246/55ax.png) Alguien sabria decirme donde esta equivocado el codigo???? @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
Título: Re: [batch] error con findstr
Publicado por: Eleкtro en 9 Octubre 2013, 15:49 pm
Hola 1. Esto d้jalo asํ, sin espacios delante del "=":
2. Esto d้jalo asํ, encerrando la expresi๓n. FOR /F "usebackq= delims=" %%A IN (" %anime%.txt" ) DO (Echo. %%A) | MORE
3. 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
Título: Re: [batch] error con findstr
Publicado por: shadowhunter 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?
Título: Re: [batch] error con findstr
Publicado por: Eleкtro 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ํ: FOR /F "usebackq delims=" %%A IN ("%anime%.txt") DO (Echo.%%A) | MORE Saludos
Título: Re: [batch] error con findstr
Publicado por: shadowhunter 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: @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!
Título: Re: [batch] error con findstr
Publicado por: Eleкtro 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: @Echo OFF & Color 70 & MODE con cols=75 REM SET "Directory=.\" :RETURN cls echo ษอออออออออออออออออออออออป echo บ Eliminar un anime บ echo ศอออออออออออออออออออออออผ |MORE echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE Echo introduzca el nombre de la lista de donde quiere eliminar un anime: If /I NOT " %File:~-3%" EQU "txt" (Set "File= %File%.txt" ) :RESETDEL cls echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE FOR /F "usebackq delims=" %%A IN (" %File%" ) DO (Echo. %%A) | MORE echo ออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออ |MORE echo Para salir del modo, cerrar el programa. |MORE echo Seleccione el anime a borrar: Type "%Directory%\%File%" | Findstr /V /I "%borrar%">"%Directory%\%File%.tmp" Del /Q " %Directory%\ %File%" Rename " %Directory%\ %File%.tmp" " %File%" cls echo el anime ha sido eliminado satisfactoriamente. |MORE :ERROR cls REM Para manejar varios tipos de errores... 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 ) 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
Título: Re: [batch] error con findstr
Publicado por: shadowhunter 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: 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!
Título: Re: [batch] error con findstr
Publicado por: shadowhunter 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: PUSHD "%Directory%" 2>NUL || (Call :ERROR "1") Y la segunda no entiendo el funcionamiento de estos if y para que sirve POPD :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...
Título: Re: [batch] error con findstr
Publicado por: Eleкtro en 10 Octubre 2013, 21:20 pm
En consola: + http://ss64.com/nt/syntax-redirection.html + http://ss64.com/nt/syntax-args.html Saludos
|