tengo esta agenda, pero no consigo que modifique ni que elimine solo el registro, esto es lo que tengo de la agenda:
@echo off
:menu
cls
echo.
echo.
echo **************************************
echo ** AGENDA TELEFONICA **
echo ** **
echo ** 1. Agregar **
echo ** **
echo ** 2. Modificar **
echo ** **
echo ** 3. Borrar **
echo ** **
echo ** 4. Buscar **
echo ** **
echo ** 0. Salir **
echo ** **
echo **************************************
echo.
echo Escoger opcion:
set /p opt=
if %opt%==1 goto :agregar
if %opt%==2 goto :modificar
if %opt%==3 goto :borrar
if %opt%==4 goto :buscar
if %opt%==0 goto :salir
goto menu
:agregar
cls
set /p agregar= Nuevo nombre:
echo.
set /p telefono= Numero telefono:
echo.
echo %agregar% : %telefono%>> agenda.txt
echo Registro agregado
echo.
echo Pulse una tecla para volver al menu
pause>nul
goto :menu
:modificar
cls
set /p modificar= Escriba el nombre a modificar:
set /p mod= Escriba el nuevo nombre:
for /f "tokens=* delims=" %%x in ('type Registros') do (
set /a conta +=1
set linea=%%x
set linea=!linea:%modificar%=%mod%!
call :show !linea!
)
goto :menu
:show
echo %* >> out.txt
if !conta!==1 (
echo.>Registros
)
type out.txt >> Registros
del /f /a /q out.txt
pause>nul
goto :menu
:borrar
cls
set /p borrar= Nombre del contacto a eliminar:
if exist "agenda\%borrar%.bat" (goto dels) else (goto deln)
:dels
del /f /s /q "G:\agenda\%borrar%.bat"
cls
echo El contacto ha sido eliminado correctamente
pause>nul
goto :menu
:deln
cls
echo Ese contacto no existe en la agenda
echo.
:buscar
cls
echo.
set /p find= Buscar:
cls
echo.
echo Resultados:
echo.
find /n /i "%find%" agenda.txt
echo Pulse una tecla para volver al menu
pause>nul
goto :menu
:salir
cls
echo Ok, presione cualquier tecla para salir
pause>nul
exit
También tengo otro problema, que no consigo que me lo ordene de esta manera:
un asterisco y un número par en la misma línea en un archivo y un asterisco y un número impar en una línea en otro archivo, :así
* 2
* 6
en el otro archivo así
* 1
* 5
tengo esto
@echo off
cls
echo Voy a ordenar el fichero txt:
echo.
set /p ordenar=
sort %ordenar%
echo Archivo ordenado
echo.
echo Pulse una tecla para volver al menu
pause>nul
Si alguien puede ayudarme...
1º - Tienes que escapar los caracteres especiales.
:-( echo %agregar% : %telefono%
;D echo %agregar% ^: %telefono%
Con eso ya funciona la opcion "agregar".
2º - for /f "tokens=* delims=" %%x in ('type Registros')
No estás delimitando nada, falta el simbolo delimitador...
Y además, No existe el archivo "Registros" así que el comando del type no puede funcionar.
3º - set linea=!linea:%modificar%=%mod%!
¿Has leido algún tutorial de batch?
Estás expandiendo la variable sin tener la caracteristica activada.
Setlocal enabledelayedexpansion
4º - set /a conta+=1
if !conta! EQU 1
No se con que intención intentaste rear un contador, la verdad...
Aqui tienes...
Saludos
@echo off
Setlocal enabledelayedexpansion
:menu
cls
echo.
echo.
echo **************************************
echo ** AGENDA TELEFONICA **
echo ** **
echo ** 1. Agregar **
echo ** **
echo ** 2. Modificar **
echo ** **
echo ** 3. Borrar **
echo ** **
echo ** 4. Buscar **
echo ** **
echo ** 0. Salir **
echo ** **
echo **************************************
echo.
echo Escoger opcion:
set /p opt=
if %opt%==1 goto :agregar
if %opt%==2 goto :modificar
if %opt%==3 goto :borrar
if %opt%==4 goto :buscar
if %opt%==0 goto :salir
goto menu
:agregar
cls
set /p agregar= Nuevo nombre:
echo.
set /p telefono= Numero telefono:
echo.
echo %agregar% ^: %telefono%>> agenda.txt
echo Registro agregado
echo.
echo Pulse una tecla para volver al menu
pause>nul
goto :menu
:modificar
cls
set /p modificar= Escriba el nombre a modificar:
set /p mod= Escriba el nuevo nombre:
for /f "tokens=*" %%x in ('type "agenda.txt"') do (
set "linea=%%x"
set linea=!linea:%modificar%=%mod%!
Echo !linea! >> Nueva_Agenda.txt
call :show !linea!
)
Del /Q "Agenda.txt"
Rename "Nueva_Agenda.txt" "Agenda.txt"
goto :menu
:borrar
cls
set /p borrar= Nombre del contacto a eliminar:
if exist "agenda\%borrar%.bat" (goto dels) else (goto deln)
:dels
del /f /s /q "G:\agenda\%borrar%.bat"
cls
echo El contacto ha sido eliminado correctamente
pause>nul
goto :menu
:deln
cls
echo Ese contacto no existe en la agenda
echo.
:buscar
cls
echo.
set /p find= Buscar:
cls
echo.
echo Resultados:
echo.
find /n /i "%find%" agenda.txt
echo Pulse una tecla para volver al menu
pause>nul
goto :menu
:salir
cls
echo Ok, presione cualquier tecla para salir
pause>nul
exit
También tengo otro problema, que no consigo que me lo ordene de esta manera:
un asterisco y un número par en la misma línea en un archivo y un asterisco y un número impar en una línea en otro archivo, :así
* 2
* 6
en el otro archivo así
* 1
* 5
tengo esto
@echo off
cls
echo Voy a ordenar el fichero txt:
echo.
set /p ordenar=
sort %ordenar%
echo Archivo ordenado
echo.
echo Pulse una tecla para volver al menu
pause>nul
Saludos
[quote author=Towandy link=topic=356161.msg1727177#msg1727177 date=1331426621]
También tengo otro problema, que no consigo que me lo ordene de esta manera:
un asterisco y un número par en la misma línea en un archivo y un asterisco y un número impar en una línea en otro archivo, :así
* 2
* 6
en el otro archivo así
* 1
* 5
tengo esto
@echo off
cls
echo Voy a ordenar el fichero txt:
echo.
set /p ordenar=
sort %ordenar%
echo Archivo ordenado
echo.
echo Pulse una tecla para volver al menu
pause>nul
Si alguien puede ayudarme...
[/quote]
Explica con más detalles, ¿Cual es el problema?, Sort ordena correctamente esos ejemplos que pusiste.
saludos
Explico el tema,
Hay un archivo txt con 10 números y asteriscos desordenados, cada número y asterisco en una línea y crear un .bat que pasando ese txt como parámetro cree unn fichero txt con los datos del fichero anterior solo con los números pares y otro fichero con los números impares.
Gracias
Sí he leído manuales de batch, pero quizá debería haber uno para tontos que explicara bien para qué sirve cada cosa explicando con detalle un ejemplo para for, todos los if, sort, randomize, parámetros... y como no he encontrado ninguno así, pues tengo mucho despiste, llevo muy poco tiempo con esto.
Gracias
pero tampoco consigo que la agenda borre un registro sólo, lo que consigo es que se cargue por completo el archivo txt donde están todos los registros.
Cita de: Towandy en 11 Marzo 2012, 10:04 AM
Explico el tema,
que pasando ese txt como parámetro cree unn fichero txt con los datos del fichero anterior solo con los números pares y otro fichero con los números impares.
Usa el botón "EDITAR" en vez de escribir 3 posts en 2 minutos, o algún mod te echará bronca xD
Te hago el code y tu ya lo aplicas...
EDITO: Si solo son 10 números no hace falta tanto code la verdad, Pero esto te sirve para todas las cantidades de números que quieras xD
@Echo off
Setlocal enabledelayedexpansion
For /F "Tokens=*" %%# in ('Type Archivo.txt') Do (
Set Num=%%#
Echo !Num!>"%TEMP%\Num.tmp"
FOR %%? IN ("%TEMP%\Num.tmp") DO (SET /A Longitud=%%~z? - 3)
Call :Paridad
)
Goto :FIN
:Paridad
Echo !Num:~%Longitud%,1!| Findstr "0 2 4 6 8" >NUL
If %Errorlevel% EQU 0 (Echo !Num!>>Pares.txt) ELSE (Echo !Num!>>Impares.txt)
Goto :EOF
:Fin
Echo Proceso completado...
Pause
Exit
EDITO: Aqui te dejo otro método que se me ha ocurrido más sencilla
@@Echo off
For /F "Tokens=1,2 delims= " %%a in ('Type Archivo.txt') Do (
Set /A Divide = %%b/2, Divide = Divide*2
Call :Paridad %%b
IF Errorlevel 1 (Echo %%a %%b>>Impares.txt) Else (Echo %%a %%b>>Pares.txt)
)
Goto :FIN
:Paridad
If %Divide% EQU %1 (Exit /B 0) ELSE (Exit /B 1)
:Fin
Echo Proceso completado...
Pause
Exit
Sobre lo de borrar...
:borrar
set /p borrar= Nombre del contacto a eliminar:
if exist "agenda\%borrar%.bat" (goto dels) else (goto deln)
:dels
del /f /s /q "G:\agenda\%borrar%.bat"
Estás seteando la variable "BORRAR", y luego buscas en el directorio (Actual) "Agenda\%borrar%.bat", Y si encuentra ese bat, lo borra...
Pues en teoría está bien, no veo nada mal, a menos que no lo estés ejecutando desde la carpeta "
Agenda"...
También vas a tener que explicarmelo mejor xD
Además, no estabamos hablando de un .TXT? ¿Ahora esto trata sobre eliminar el nombre dentro del archivo texto donde están todos los registros, o sobre eliminar un ".bat" suelto?... detalles...
De todas formas prueba así...
set /p borrar= Nombre del contacto a eliminar:
if /I exist "G:\aagenda\%borrar%.bat" (goto :dels) else (goto :deln)
:dels
del /q "G:\agenda\%borrar%.bat"
:Deln
pause