dos scripts

Iniciado por Towandy, 11 Marzo 2012, 01:43 AM

0 Miembros y 3 Visitantes están viendo este tema.

Towandy

tengo esta agenda, pero no consigo que modifique ni que elimine solo el registro, esto es lo que tengo de la agenda:

Código (bash) [Seleccionar]
@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...

Eleкtro

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








Eleкtro

[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








Towandy

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

Towandy

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

Towandy

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.

Eleкtro

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

Código (dos) [Seleccionar]
@@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...

Código (dos) [Seleccionar]
: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í...

Código (dos) [Seleccionar]
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