Eliminar lineas archivo txt

Iniciado por Wiliam678, 13 Noviembre 2018, 21:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Wiliam678

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 (bash) [Seleccionar]
@echo off
color f
:inicio
FOR %%i IN (.\prestamos\*.txt) DO ECHO %%i
ECHO Que libro desea devolver?
set /p libro=
echo. > .\prestamos.txt\
move .\prestamos\%libro%.txt .\libros\%libro%.txt
:fin


El problema esta en el echo que me borra todo.

MOD: Titulo en minusculas. Etiqueta GeSHi.

**Aincrad**

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 (bash) [Seleccionar]
@echo off
:inicio
cls
color a
dir /b prestamos\*.txt | findstr /n ".txt$"                                
(for %%x in (prestamos\*.txt) do set /a a+=1)
echo/
echo      Libros Actuales:  %a%
echo/
echo Que libro desea devolver?
echo/
set /p libro=  
if not defined libro (goto:inicio) >NUL
if not exist prestamos\%libro%.txt (goto:inicio) >NUL
move .\prestamos\%libro%.txt .\libros\%libro%.txt
if exist prestamos.txt del prestamos.txt
For %%i in (prestamos\*.txt) do echo %%i >> prestamos.txt
pause


Salida :







Wiliam678

#2
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

**Aincrad**

Lo que entendí es que tienes un archivo "Prestamo.txt" en la cual están registrados los libros tales como :

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 (bash) [Seleccionar]
@echo off
:inicio
cls
color a
dir /b prestamos\*.txt | findstr /n ".txt$"                                 
(for %%x in (prestamos\*.txt) do set /a a+=1)
echo/
echo      Libros Actuales:  %a%
echo/
echo Que libro desea devolver?
echo/
set /p libro=   
if not defined libro (goto:inicio) >NUL
if not exist prestamos\%libro%.txt (goto:inicio) >NUL
move .\prestamos\%libro%.txt .\libros\%libro%.txt

:log
if exist prestamos.txt del prestamos.txt
For %%i in (prestamos\*.txt) do (echo %%i & type %%i & echo/ & echo/ ) >> prestamos.txt
goto :Eof






Wiliam678

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

**Aincrad**

Hubieras Simplemente dicho esto sin rodeos desde un principio, toma :

Código (bash) [Seleccionar]
@echo off
:inicio
cls
color a
dir /b prestamos\*.txt | findstr /n ".txt$"                                 
(for %%x in (prestamos\*.txt) do set /a a+=1)
echo/
echo      Libros Actuales:  %a%
echo/
echo Que libro desea devolver?
echo/
set /p libro=   
if not defined libro (goto:inicio) >NUL
if not exist prestamos\%libro%.txt (goto:inicio) >NUL
move .\prestamos\%libro%.txt .\libros\%libro%.txt

:log
if exist prestamos.txt del prestamos.txt
for %%i in ("prestamos\*.txt") do (
        echo %%~nxi
        type %%i
        echo/
        echo/
    )>> prestamos.txt
goto :Eof


Esto si te lo deja asi :

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.






Wiliam678

#6
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:
libro8.txt
y yo quiero que me quede esto
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:
@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

**Aincrad**

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.




Wiliam678

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:
libro6
Zakaria
13/11/2018 | 14:02:36,75

Hacerlo asi:
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:

@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