Título: dos scripts
Publicado por: Towandy en 11 Marzo 2012, 01:43 am
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...
Título: Re: dos scripts
Publicado por: Eleкtro en 11 Marzo 2012, 02:25 am
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
Título: Re: dos scripts
Publicado por: Eleкtro en 11 Marzo 2012, 04:06 am
[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
Título: Re: dos scripts
Publicado por: Towandy en 11 Marzo 2012, 10:04 am
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
Título: Re: dos scripts
Publicado por: Towandy en 11 Marzo 2012, 10:08 am
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
Título: Re: dos scripts
Publicado por: Towandy en 11 Marzo 2012, 10:10 am
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.
Título: Re: dos scripts
Publicado por: Eleкtro en 11 Marzo 2012, 10:57 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 For /F "Tokens=1,2 delims= " %%a in ('Type Archivo.txt' ) Do ( Set /A Divide = %%b/2, Divide = Divide*2 ) :Paridad :Fin Echo Proceso completado...
Sobre lo de borrar... :borrar set /p borrar= Nombre del contacto a eliminar: :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: :dels del /q "G:\agenda\ %borrar%.bat" :Deln
|