Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Wiliam678 en 13 Noviembre 2018, 21:19 pm



Título: Eliminar lineas archivo txt
Publicado por: Wiliam678 en 13 Noviembre 2018, 21:19 pm
Esta es mi primera vez en el foro y tengo un programa de una libreria por asi decirlo en batch, la cual tiene varias opciones y entre ellas una de Devolver Libros que lo que tiene que hacer es que al crearse un archivo (prestamos.txt) me borre el libro que puse. ej:

libro6
Zakaria
13/11/2018 | 14:02:36,75
libro7
Zakaria
13/11/2018 | 14:03:08,39
Quiero devolver el libro 6 por ejemplo para que me quede asi:

libro7
Zakaria
13/11/2018 | 14:03:08,39
Esto es lo que llevo por ahora:

Código
  1. @echo off
  2. color f
  3. :inicio
  4. FOR %%i IN (.\prestamos\*.txt) DO ECHO %%i
  5. ECHO Que libro desea devolver?
  6. set /p libro=
  7. echo. > .\prestamos.txt\
  8. move .\prestamos\%libro%.txt .\libros\%libro%.txt
  9. :fin

El problema esta en el echo que me borra todo.

MOD: Titulo en minusculas. Etiqueta GeSHi.


Título: Re: Eliminar lineas archivo txt
Publicado por: **Aincrad** en 14 Noviembre 2018, 01:57 am
Ese Echo no te borra nada , mas bien lanza error en la sintaxis. de hecho no hace nada mas que mostrar error. y el libro si se mueve. de la carpeta prestamos a la carpeta libros. Plantea mejor tu duda. y con gusto te ayudo.



No entendí tu duda pero supongo que lo que querías era hacer un log de los archivos que quedan en la carpeta prestamos , y ademas te faltan agregar algunos condicionales ; por ejemplo en la parte que te pregunta Que libro desea Devolver?

1) si no pones nada y sigues te dará error.
2) Si el archivo no existe, también te dará error.


Bueno de todos modos aquí esta :

Código
  1. @echo off
  2. :inicio
  3. cls
  4. color a
  5. dir /b prestamos\*.txt | findstr /n ".txt$"                                
  6. (for %%x in (prestamos\*.txt) do set /a a+=1)
  7. echo/
  8. echo      Libros Actuales:  %a%
  9. echo/
  10. echo Que libro desea devolver?
  11. echo/
  12. set /p libro=  
  13. if not defined libro (goto:inicio) >NUL
  14. if not exist prestamos\%libro%.txt (goto:inicio) >NUL
  15. move .\prestamos\%libro%.txt .\libros\%libro%.txt
  16. if exist prestamos.txt del prestamos.txt
  17. For %%i in (prestamos\*.txt) do echo %%i >> prestamos.txt
  18. pause

Salida :

(https://image.ibb.co/d0ctVL/1.jpg)




Título: Re: Eliminar lineas archivo txt
Publicado por: Wiliam678 en 14 Noviembre 2018, 11:08 am
Lo que quería decir es que yo tengo un archivo txt de los libros prestados y quiero que cuando devuelva los libros prestados me lo elimine del archivo prestamos.txt de tal forma que me borre o elimine el libro 6 junto con el nombre y la fecha de tal forma que me queden solo los prestados como aquí en el caso de prestar el libro 6 y 7, y devolver el 6:
libro7
Zakaria
13/11/2018 | 14:03:08,39
PD: Tambien me sirve remplazarlo o cualquier otra manera siempre que me quede de esa manera
PD: El codigo que me pasaste esta mas o menos bien, lo unico que en lugar de la ruta quiero que me deje lo del libro, el nombre y la fecha


Título: Re: Eliminar lineas archivo txt
Publicado por: **Aincrad** en 14 Noviembre 2018, 20:21 pm
Lo que entendí es que tienes un archivo "Prestamo.txt" en la cual están registrados los libros tales como :

Código:
libro6
Zakaria
13/11/2018 | 14:02:36,75

libro7
Zakaria
13/11/2018 | 14:03:08,39

Lo que quieres con el Bat es que cuando Muevas el Libro6.txt también se borre del "Prestamo.txt" . Bueno hay varias maneras (Complicadas) de hacer esto.

1) La Primera es Buscar en "Prestamo.txt" la Palabra "Libro6" y eliminar esa linea con las dos de abajo que le siguen. así quedaría solo el LIBRO7.

2) La Segunda es Modificar el Log que te hice en el código anterior, una manera simple y sencilla

Bueno hare la segunda manera , me es mas facil.




Toma:

Código
  1. @echo off
  2. :inicio
  3. cls
  4. color a
  5. dir /b prestamos\*.txt | findstr /n ".txt$"                                
  6. (for %%x in (prestamos\*.txt) do set /a a+=1)
  7. echo/
  8. echo      Libros Actuales:  %a%
  9. echo/
  10. echo Que libro desea devolver?
  11. echo/
  12. set /p libro=  
  13. if not defined libro (goto:inicio) >NUL
  14. if not exist prestamos\%libro%.txt (goto:inicio) >NUL
  15. move .\prestamos\%libro%.txt .\libros\%libro%.txt
  16.  
  17. :log
  18. if exist prestamos.txt del prestamos.txt
  19. For %%i in (prestamos\*.txt) do (echo %%i & type %%i & echo/ & echo/ ) >> prestamos.txt
  20. goto :Eof



Título: Re: Eliminar lineas archivo txt
Publicado por: Wiliam678 en 14 Noviembre 2018, 21:11 pm
Agradezco sinceramente tu aportacion, la verdad me has ayudado bastante ;-), pero no es del todo lo que buscaba lo que quiero hacer es que en lo de libros:
libro6
Zakaria
13/11/2018 | 14:02:36,75

libro7
Zakaria
13/11/2018 | 14:03:08,39

no me lo deje asi:
prestamos\libro7.txt

SINO asi:
libro7
Zakaria
13/11/2018 | 14:03:08,39
ES decir que solo me quite lo del libro con su fecha y nombre correspondiente
Un saludo y gracias de nuevo
 


Título: Re: Eliminar lineas archivo txt
Publicado por: **Aincrad** en 15 Noviembre 2018, 00:02 am
Hubieras Simplemente dicho esto sin rodeos desde un principio, toma :

Código
  1. @echo off
  2. :inicio
  3. cls
  4. color a
  5. dir /b prestamos\*.txt | findstr /n ".txt$"                                
  6. (for %%x in (prestamos\*.txt) do set /a a+=1)
  7. echo/
  8. echo      Libros Actuales:  %a%
  9. echo/
  10. echo Que libro desea devolver?
  11. echo/
  12. set /p libro=  
  13. if not defined libro (goto:inicio) >NUL
  14. if not exist prestamos\%libro%.txt (goto:inicio) >NUL
  15. move .\prestamos\%libro%.txt .\libros\%libro%.txt
  16.  
  17. :log
  18. if exist prestamos.txt del prestamos.txt
  19. for %%i in ("prestamos\*.txt") do (
  20.        echo %%~nxi
  21.        type %%i
  22.        echo/
  23.        echo/
  24.    )>> prestamos.txt
  25. goto :Eof

Esto si te lo deja asi :

Código:
libro8.txt
Zakaria 2
13/11/2018 | 14:03:08,39

Nota: Si queréis eliminarle el .txt hazlo tu ya te he hecho bastante.




Título: Re: Eliminar lineas archivo txt
Publicado por: Wiliam678 en 15 Noviembre 2018, 09:29 am
Ya se que me explique mal, pero no sabia como explicarlo. El código que me pasaste hace básicamente lo mismo que el anterior
Me pone esto:
Código:
libro8.txt
y yo quiero que me quede esto
Código:
libro8.txt
Zakaria 2
13/11/2018 | 14:03:08,39
A mi me da igual si elimina el txt o no
Este programa tiene diferentes opciones: Ver libros,Prestar libros, Devolverlos y Ver libros prestados
Aquí tenéis el código de la opción prestar libros:
Código:
@echo off
:inicio
color f
set /p NOMBRE= El nombre de usuario es %NOMBRE%? Si lo es presione enter, sino escribalo
ECHO QUE LIBRO DESEA PRESTAR?
FOR %%i IN (.\libros\*.txt) DO ECHO %%i
ECHO Que libro desea prestar?
set /p libro=
echo %libro%>> .\prestamos.txt
echo %NOMBRE%>> .\prestamos.txt
echo %DATE% ^| %TIME%>> .\prestamos.txt
move .\libros\%libro%.txt .\prestamos\%libro%.txt
:fin

PD: Gracias de nuevo


Título: Re: Eliminar lineas archivo txt
Publicado por: **Aincrad** en 15 Noviembre 2018, 12:04 pm
Hablemos esto por mensajes Privados , no quiero llenar este post con mensajes. me puedes pasar tu código completo por privado y te echo una mano.


Título: Re: Eliminar lineas archivo txt
Publicado por: Wiliam678 en 15 Noviembre 2018, 14:14 pm
YA esta solucionado el problema, era mas sencillo de lo que pensaba, lo que hize fue en la opcion Prestar libros cambiar y en lugar de:
Código:
libro6
Zakaria
13/11/2018 | 14:02:36,75

Hacerlo asi:
Código:
libro6 - Zakaria - 15/11/2018 | 14:08:20,04

Para usar el comando findstr para eliminar el libro con la linea entera sin necesidad de hacer mas:

Código:
@echo off
:inicio
cls
color f
FOR %%i IN (.\prestamos\*.txt) DO ECHO %%i
ECHO Que libro desea devolver?
set /p libro=
findstr /V "%libro%" prestamos.txt > prestamos2.txt
del prestamos.txt
ren prestamos2.txt prestamos.txt
move .\prestamos\%libro%.txt .\libros\%libro%.txt