Hola amigos gracias a esta comu pude desarrollar mi primera Base de datos en Batch...
Como funciona:
El batch consta en 4 opciones.
las cuales te permiten realizar :
1.- Agregar Cliente
2.- Buscar dentro de la Base de datos
3.- Mostrar el contenido de la Base de datos
4.- Borrar Base de datos
Al agregar un cliente se guarda en un txt llamado Cliente guardado en %Homedrive%. Bueno sin mas charla el codigo
@echo off
title Base de datos Clientes
color fc
:menu
cls
echo.&&echo.
echo 1.- Agregar Cliente
echo 2.- Buscar dentro de la Base de datos
echo 3.- Mostrar el contenido de la Base de datos
echo 4.- Borrar Base de datos
echo.
set /p o= Elija una opcion :
if not defined o goto menu
if %o%==1 (goto add)
if %o%==2 (goto b)
if %o%==3 (goto x)
if %o%==4 (goto dl) else (goto menu)
:add
cls
set /p name= Nombre de cliente =
set /p dire= Direccion =
set /p n= Numero =
set /p c= Compras Recientes =
set /p t= Talla =
set /p s= Sexo =
echo Cliente :%name%>>%homedrive%\clientes.txt
echo Direccion :%dire%>>%homedrive%\clientes.txt
echo Numero :%n%>>%homedrive%\clientes.txt
echo Compras :%c%>>%homedrive%\clientes.txt
echo Talla :%t%>>%homedrive%\clientes.txt
echo Sexo :%s%>>%homedrive%\clientes.txt
echo ------------------------------------------------->>%homedrive%\clientes.txt
echo Generado Correctamente
pause
goto menu
:b
cls
set /p bo= Que desea buscar dentro de la Base de datos :
setlocal enabledelayedexpansion
for /f "tokens=*" %%_ in ('find "%bo%" "%homedrive%\clientes.txt" ') do (
set "valor=%%_"
echo El valor es : !valor!
)
pause
goto menu
:dl
cls
echo.
echo Se borrara la base de datos esta seguro si/no
echo Se perderan todo los datos guardados
set /p de=^>^>
if %de%==si (goto del) else (goto menu)
if %de%==no (goto menu)
:del
cls
echo Borrando...
ping -n 2 0.0.0.0>nul
del /q /f %homedrive%\clientes.txt
echo Eliminado
pause
goto menu
:x
cls
echo.
type %homedrive%\clientes.txt
pause
goto menu
Si encuentran un error o una mejora, Bienvenido sea...
Yo le pondria mas "anti errores", por ejemplo cada vez q pides el valor de una variable, antes tienes que anularla asi:
set "var="
Por que sino quedara con el valor que tenia antes, para entender lo que te digo, agarra tu programa sin poner esto que te digo y elegi una opcion en el menu, la que quieras; ahora cuando estes de nuevo en el menu, apreta solo Enter sin escribir nada y te llevara al mismo lugar.
Y aunque sea feo y tengas que crear mas etiquetas le pondria los if not defined cuando pides los datos, para que no dejen nada en blanco.
Espero haberte ayudado
Cierto, usas muchas variables y conviene "resetearlas" al volver al :MENU, porque sino aunque dejes vacía alguna de las variables como talla dire y eso, se tomará la variable anterior... espero que se me entienda xD
aparte de eso, dejame mejorartelo un poquito lo que pueda :xD
PD: Copia este código tal cual, para probarlo, aunque veas caracteres raros al copiar no te preocupes, en la consola salen bien las palabras con los acentos y eso ::)
Leo es un crack con el tema de trabajar sobre archivos de texto así que yo esperaría a ver si te da una solución para una mejor busqueda sobre la lista de clientes... ;-)
@echo off
title Base de datos Clientes
color fc
If not exist "%homedrive%\clientes.txt" (echo.>"%homedrive%\clientes.txt")
:############################################################
REM En esta parte no he correjido nada importante, solo sintaxis y gramática xD, el "ELSE" del final...
REM Reseteando variables...
:MENU
Set o=
set check=
Set de=
set bo=
cls
echo.
echo %time%
echo ##########
echo.
echo.
echo 1.- Agregar Cliente
echo 2.- Buscar dentro de la Base de datos
echo 3.- Mostrar el contenido de la Base de datos
echo 4.- Borrar Base de datos
echo.
echo.
set /p o= Elija una opci¢n:
if not defined o (goto :menu)
if %o%==1 (goto :add)
if %o%==2 (goto :b)
if %o%==3 (goto :x)
if %o%==4 (goto :dl)
goto :menu
:############################################################
REM Aqui nos aseguramos de que ningún campo queda vacío...
:add
set name=
set dire=
set n=
set c=
set t=
set s=
cls
echo.
set /p name=- Nombre de cliente: & Call :verify name
set /p dire=- Direcci¢n : & Call :verify dire
set /p n=- N£mero : & Call :verify n
set /p c=- Compras Recientes: & Call :verify c
set /p t=- Talla : & Call :verify t
set /p s=- Sexo : & Call :verify s
echo Cliente : %name%>>%homedrive%\clientes.txt
echo Direcci¢n : %dire%>>%homedrive%\clientes.txt
echo N£mero : %n%>>%homedrive%\clientes.txt
echo Compras : %c%>>%homedrive%\clientes.txt
echo Talla : %t%>>%homedrive%\clientes.txt
echo Sexo : %s%>>%homedrive%\clientes.txt
echo -------------------------------------------------;>>%homedrive%\clientes.txt
echo Generado Correctamente.
echo+
pause
goto :menu
:verify
if not defined %1 (
set %1=Ninguno
goto :eof
) ELSE (
goto :eof
)
:############################################################
REM no te recomiendo usar setlocal si hay productos o datos que contengan caracteres especiales como "Nike!" ...pues no los vas a encontrar xD
REM en el metodo de buscqueda no he podido hacer nada mejor, habria sido fácil usando tail y txtback porque cada cliente esta separado en 7 líneas, pero bueno, no me he kerido comer más el coco :xD
:b
cls
echo+
set /p bo=- ¨Que desea buscar dentro de la Base de datos?:
find "%bo%" "%homedrive%\clientes.txt" >nul
If %errorlevel% equ 0 (
find "%bo%" "%homedrive%\clientes.txt"
echo+
pause
goto :menu
) ELSE (
echo+
echo No se ha encontrado ninguna coincidencia, Intentelo de nuevo...
echo+
pause
goto :menu
)
Goto :menu
:############################################################
REM Ahora el código reconoce varias respuestas (si,SI,Si,sI,sí,Sí - No,no,NO,nO) en cambio tu código solo reconocia dos (Aunque no te lo parezca así era).
:dl
cls
echo.
echo Se borrar... la base de datos, ¨Est... seguro? Si/No
echo Se perder...n todos los datos guardados...
set /p de=^>^>
echo %de%| findstr /I "^S.$" >nul
If %errorlevel% equ 0 (goto :del)
echo %de%| findstr /I "^NO$" >nul
If %errorlevel% equ 0 (goto :menu)
Goto :menu
:############################################################
REM Mas vale prevenir que curar, Los HDD's a veces se estropean, mejor nos aseguramos de que la lista se borre de verdad xD
:del
cls
echo+
echo Borrando...
ping -n 2 localhost >nul
del /q /f "%homedrive%\clientes.txt" >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
echo Eliminado.
echo+
pause
goto :menu
) ELSE (
cls
echo No se pudo borrar la lista.
echo+
pause
goto :checkeo
)
:############################################################
REM Y esta parte me la invento xD
:checkeo
cls
echo ¨Quiere iniciar un escaneo de errorer de su disco duro? Si/No
echo Se reiniciar... el Pc...
set /p CHECK=^>^>
echo %CHECK%| findstr /I "^S.$" >nul
If %errorlevel% equ 0 (
echo S | chkdsk %homedrive% /F /R /X >nul
shutdown -r -t 10
)
echo %CHECK%| findstr /I "^NO$" >nul
If %errorlevel% equ 0 (goto :menu)
Goto :menu
:############################################################
REM En el antiguo código, Sí la lista es demasiado larga no se mostraría entera... Queda corregido por si acaso.
:x
cls
echo.
type "%homedrive%\clientes.txt" | More /E /C
echo+
pause
goto :menu
Cita de: EleKtro H@cker en 5 Noviembre 2011, 03:51 AM
Cierto, usas muchas variables y conviene "resetearlas" al volver al :MENU, porque sino aunque dejes vacía alguna de las variables como talla dire y eso, se tomará la variable anterior... espero que se me entienda xD
aparte de eso, dejame mejorartelo un poquito lo que pueda :xD
PD: Copia este código tal cual, para probarlo, aunque veas caracteres raros al copiar no te preocupes, en la consola salen bien las palabras con los acentos y eso ::)
Leo es un crack con el tema de trabajar sobre archivos de texto así que yo esperaría a ver si te da una solución para una mejor busqueda sobre la lista de clientes... ;-)
@echo off
title Base de datos Clientes
color fc
If not exist "%homedrive%\clientes.txt" (echo.>"%homedrive%\clientes.txt")
:############################################################
REM En esta parte no he correjido nada importante, solo sintaxis y gramática xD, el "ELSE" del final...
REM Reseteando variables...
:MENU
Set o=
set check=
Set de=
set bo=
cls
echo.
echo %time%
echo ##########
echo.
echo.
echo 1.- Agregar Cliente
echo 2.- Buscar dentro de la Base de datos
echo 3.- Mostrar el contenido de la Base de datos
echo 4.- Borrar Base de datos
echo.
echo.
set /p o= Elija una opci¢n:
if not defined o (goto :menu)
if %o%==1 (goto :add)
if %o%==2 (goto :b)
if %o%==3 (goto :x)
if %o%==4 (goto :dl)
goto :menu
:############################################################
REM Aqui nos aseguramos de que ningún campo queda vacío...
:add
set name=
set dire=
set n=
set c=
set t=
set s=
cls
echo.
set /p name=- Nombre de cliente: & Call :verify name
set /p dire=- Direcci¢n : & Call :verify dire
set /p n=- N£mero : & Call :verify n
set /p c=- Compras Recientes: & Call :verify c
set /p t=- Talla : & Call :verify t
set /p s=- Sexo : & Call :verify s
echo Cliente : %name%>>%homedrive%\clientes.txt
echo Direcci¢n : %dire%>>%homedrive%\clientes.txt
echo N£mero : %n%>>%homedrive%\clientes.txt
echo Compras : %c%>>%homedrive%\clientes.txt
echo Talla : %t%>>%homedrive%\clientes.txt
echo Sexo : %s%>>%homedrive%\clientes.txt
echo -------------------------------------------------;>>%homedrive%\clientes.txt
echo Generado Correctamente.
echo+
pause
goto :menu
:verify
if not defined %1 (
set %1=Ninguno
goto :eof
) ELSE (
goto :eof
)
:############################################################
REM no te recomiendo usar setlocal si hay productos o datos que contengan caracteres especiales como "Nike!" ...pues no los vas a encontrar xD
REM en el metodo de buscqueda no he podido hacer nada mejor, habria sido fácil usando tail y txtback porque cada cliente esta separado en 7 líneas, pero bueno, no me he kerido comer más el coco :xD
:b
cls
echo+
set /p bo=- ¨Que desea buscar dentro de la Base de datos?:
find "%bo%" "%homedrive%\clientes.txt" >nul
If %errorlevel% equ 0 (
find "%bo%" "%homedrive%\clientes.txt"
echo+
pause
goto :menu
) ELSE (
echo+
echo No se ha encontrado ninguna coincidencia, Intentelo de nuevo...
echo+
pause
goto :menu
)
Goto :menu
:############################################################
REM Ahora el código reconoce varias respuestas (si,SI,Si,sI,sí,Sí - No,no,NO,nO) en cambio tu código solo reconocia dos (Aunque no te lo parezca así era).
:dl
cls
echo.
echo Se borrar... la base de datos, ¨Est... seguro? Si/No
echo Se perder...n todos los datos guardados...
set /p de=^>^>
echo %de%| findstr /I "^S.$" >nul
If %errorlevel% equ 0 (goto :del)
echo %de%| findstr /I "^NO$" >nul
If %errorlevel% equ 0 (goto :menu)
Goto :menu
:############################################################
REM Mas vale prevenir que curar, Los HDD's a veces se estropean, mejor nos aseguramos de que la lista se borre de verdad xD
:del
cls
echo+
echo Borrando...
ping -n 2 localhost >nul
del /q /f "%homedrive%\clientes.txt" >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
echo Eliminado.
echo+
pause
goto :menu
) ELSE (
cls
echo No se pudo borrar la lista.
echo+
pause
goto :checkeo
)
:############################################################
REM Y esta parte me la invento xD
:checkeo
cls
echo ¨Quiere iniciar un escaneo de errorer de su disco duro? Si/No
echo Se reiniciar... el Pc...
set /p CHECK=^>^>
echo %CHECK%| findstr /I "^S.$" >nul
If %errorlevel% equ 0 (
echo S | chkdsk %homedrive% /F /R /X >nul
shutdown -r -t 10
)
echo %CHECK%| findstr /I "^NO$" >nul
If %errorlevel% equ 0 (goto :menu)
Goto :menu
:############################################################
REM En el antiguo código, Sí la lista es demasiado larga no se mostraría entera... Queda corregido por si acaso.
:x
cls
echo.
type "%homedrive%\clientes.txt" | More /E /C
echo+
pause
goto :menu
Me Gusto el code y si acerca de resetear la variables $edu$ me lo enseño para mi Codificador...
Se me olvido hacerlo y tambien el if nod defined...
pero no entendi la parte de tu codigo chequear disco duro ?
Cita de: $Edu$ en 4 Noviembre 2011, 23:55 PM
Yo le pondria mas "anti errores", por ejemplo cada vez q pides el valor de una variable, antes tienes que anularla asi:
set "var="
Por que sino quedara con el valor que tenia antes, para entender lo que te digo, agarra tu programa sin poner esto que te digo y elegi una opcion en el menu, la que quieras; ahora cuando estes de nuevo en el menu, apreta solo Enter sin escribir nada y te llevara al mismo lugar.
Y aunque sea feo y tengas que crear mas etiquetas le pondria los if not defined cuando pides los datos, para que no dejen nada en blanco.
Espero haberte ayudado
Lo recuerdo como si hubiese sido ayer la primera vez que me ayudaste ;D
Cita de: geormarsch en 5 Noviembre 2011, 19:50 PM
no entendi la parte de tu codigo chequear disco duro ?
echo S | chkdsk %homedrive% /F /R /X >nul
supongo que lo que no entendiste es eso
al ejecutar el chkdsk en el disco principal, windows pide una confirmación para ejecutarlo en el proximo reinicio (S/N), pues con el echo S | confirmamos S automáticamente.
/F es para corregir los sectores dañados
/R para algo parecido
/X para demontar la unidad y poder analizarla (%homedrive%) (en el proximo reinicio del pc)
saludosss
Cita de: geormarsch en 4 Noviembre 2011, 20:52 PM
:dl
cls
echo.
echo Se borrara la base de datos esta seguro si/no
echo Se perderan todo los datos guardados
set /p de=^>^>
if %de%==si (goto del) else (goto menu)
if %de%==no (goto menu)
Lo unico que yo veo que podria cambiar ademas de lo que ya te mencionaron podria ser esta parte esta demas el segundo if, ya que jamas entrara jejeje
yo lo dejaria ya en si:
--
if %de%==si (goto del) else (goto menu)
--
Cita de: s00rk en 6 Noviembre 2011, 10:25 AM
Lo unico que yo veo que podria cambiar ademas de lo que ya te mencionaron podria ser esta parte esta demas el segundo if, ya que jamas entrara jejeje
yo lo dejaria ya en si:
--
if %de%==si (goto del) else (goto menu)
--
Toda La razon .... Fue un error mio jejejeje