Desde un .bat usando find encontrar un nombre de un .txt

Tengo creado un menú desde un .bat usando el comando find tengo que hacer una busqueda por nombres, matriculas, etc.. De otro documento que ha generado el propio bat el cual se llama datos.txt. Os dejo todo lo que he hecho hasta ahora para que os ubiqueis.

Tambien necesito saber como borrar una linea de datos introducida.

Os dejare en negrita las partes de duda a resolver.

@ECHO OFF

:Inicio
ECHO **** MENU OPCIONES******
ECHO * a. Agregar *
ECHO * b. Eliminar *
ECHO * c. Consultar *
ECHO * d. Salir *
ECHO ************************

set /p var=^> seleccione una opcion a-d:
if "%var%"=="a" goto op1
if "%var%"=="b" goto op2
if "%var%"=="c" goto op3
if "%var%"=="d" goto salir
goto inicio

:op1
echo has elegido la opcion de agregar.
set /p nombre= introduce nombre
set /p apellido= introduce apellido
set /p edad= introduce edad
set /p matricula= introduce matricula
Echo %nombre% %apellido% %edad% %matricula%>>datos.txt
Echo los datos introducidos iran a un archivo txt llamado datos.
Pause
goto inicio

:Op2
Echo has elegido la opcion de eliminar datos.
Pause
goto inicio

:Op3
Echo has elegido la opcion de consultar datos.
Echo introduce la opcion a consultar.
ECHO **** MENU OPCIONES******
ECHO * 1. Matricula *
ECHO * 2. Apellidos *
ECHO * 3. Mostrar *
ECHO * 4. Volver *
ECHO ************************
set /p var=^> seleccione una opcion 1-4:
if "%var%"=="1" goto 1
if "%var%"=="2" goto 2
if "%var%"=="3" goto 3
if "%var%"=="4" goto inicio

:1
Echo has elegido la opcion de busqueda por matricula.
Echo introduce una matricula
find %matricula datos.txt

Pause
goto inicio

:2
Echo has elegido la opcion de busqueda por Apellidos.
Echo introduce un apellido
find %apellido datos.txt
Pause
goto inicio

:3
Echo has elegido la opcion de mostrar contenido.
datos.txt
Pause
goto inicio

:Salir
Echo adios!
Echo pulse para cerrar la ventana
Pause
exit

1

1 respuesta

Respuesta
1

Estoy intentando encontrar una solución razonable para la eliminación de registros, partiendo de que se solicite algún dato, por ejemplo la matrícula, pero todavía no la he encontrado. Para lo otro creo que sí. Te pongo a continuación como quedarían los puntos 1 y 2 de tu bat:

:1
Echo has elegido la opcion de busqueda por matricula.
set /p matricula= introduce una matricula
for /f "tokens=*" %%a in ('type datos.txt ^|find "%matricula%"') do echo %%a
Pause
goto inicio
:2
Echo has elegido la opcion de busqueda por Apellidos.
set /p apellido= introduce un apellido
for /f "tokens=*" %%a in ('type datos.txt ^|find "%apellido%"') do echo %%a
Pause
goto inicio

Mira a ver si hacen lo que quieres.

Creo que ya tengo la opción de eliminar. Sería esta:

:Op2
Echo has elegido la opcion de eliminar datos.
Setlocal EnableDelayedExpansion
set grabar=N
del /q tmp.txt>nul 2>nul
set /p matricula= introduce la matricula del registro a eliminar
for /f "tokens=*" %%a in ('type datos.txt') do (
echo %%a^^|find "%matricula%">nul
if errorlevel 1 set grabar=S
if "!grabar!"=="S" echo %%a>>tmp.txt&set grabar=N
)
rem copy /y tmp.txt datos.txt>nul
Pause
goto inicio

Se utiliza un archivo temporal tmp.txt que se borra sin decir ni pío (por tanto si existiera se machacaría) y he dejado comentada la instrucción que copiaría ese archivo temporal sobre el datos.txt para que puedas hacer pruebas sin cargarte el datos.txt. Una vez que tengas confianza en el funcionamiento puedes quitarle el "rem" para que se ejecute la copia.
Otra cosa, en la opción de mostrar yo sería más partidario de usar un "type datos.txt" que no abriría una ventana de Bloc de Notas para presentar los datos, pero eso depende mucho del uso que se le vaya a dar. Ya me contarás.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas