Intento explicarme mejor con lo del numero no válido! Por si te intereso la historia...

A ver si me explico de una vez entre otras cosa lo que hace el .batch, o lo que pretendo que haga, es que pueda calcular fechas con distintas frecuencias (es decir aveces tiene citas cada 7 días otras cada 15, cada 21, o cada 30 días) y da la opción de calcular a partir de hoy (es decir la fecha del ordenador ) o a partir de una fecha en concreto (puede elegir la fecha y a partir de esa calcular cuando seria la siguiente cita con la frecuencia elegida)

Básicamente lo que hago es primero que nada en el código o script no me queda claro bien la terminología todavía, siempre leo distintas terminologías para cosas iguales o parecidas y me lía bueno voy al lio, es declarar estas variables :

set DIA=%date:~-10,2%
set MES=%date:~-7,2%
set ANO=%date:~-4,4%
set HORAS=%time:~0,2%
set MINUTOS=%time:~3,2%
set FRECUENCIA1=7
set FRECUENCIA2=15
set FRECUENCIA3=21

set FRECUENCIA4=30

Bueno después de eso le hago un menu con un set /p tal que así:

:menu_basico
Echo "1. Registrar Fecha Manualmente"
Echo "2. Registrar Fechas con la Frecuencia deseada"
Echo "3. Ir al gestor de búsqueda y vizualizacion de citas"
set /p elec0= Elige una opcion :
if %elec0%==1 call :Manualmente
if %elec0%==2 call :buscar_fecha_libre
if %elec0%==3 start /max  buscador_de_citas.bat & exit

Entonces lo que pretendo es que en el 1 pueda registrar una fecha directamente y el 2 haga las sumas y restas pertinentes para que que de con la fecha exacta

Pues si elige la opción dos que es donde esta teniendo el problema, hago una llamada a un "bucle"(así es mi tecnicismo para llamar yo cada vez que uso un " :lo que sea ", espero a verme expresado XD) bueno pues uso el call para llamar a :buscar_fecha_libre :

-----------------------------------------------------------------------------------------------------------------------

:buscar_fecha_libre
set /p elige= 1.Apartir de Hoy  2.Apartir de una fecha en concreto
if %elige%==1  (call :seguimosmai)
if %elige%==2 (goto :neXt) else (echo opcion inccorrecta )
goto buscar_fecha_libre
:seguimosmai
set elegirDia=%DIA% &set MeS=%MES%
set /p frecuencia=1.semanalmente   2.Cada 15 dias    3.Cada 21 dias    4.Mensualmente
if %frecuencia%==1 (set elegirFrecuencia=%FRECUENCIA1% & goto nexT2)
if %frecuencia%==2 (set elegirFrecuencia=%FRECUENCIA2% & goto nexT2)
if %frecuencia%==3 (set elegirFrecuencia=%FRECUENCIA3% & goto nexT2)
if %frecuencia%==4 (set elegirFrecuencia=%FRECUENCIA4% & goto nexT2) else (echo El numero
    no corresponde con niguna frecuencia) & (goto nexT )
:nexT2
set /a resultado_principal=%elegirDia%+%elegirFrecuencia%

Entonces llegados a este punto es donde me falla, pues bien aquí el problema de si la frecuencia se aplica a partir de hoy o a partir de una fecha en concreto lo resolví así, un poco lioso pero es la menos liosa de todas las que probé y funcionan jejej. El caso es que si elige la opción 1 no había dado problema pues porque estamos en el mes 04 y no coincido nunca que saliera como día 08 ni 09 pero probando la opción dos que lo que hago es saltarme todo el proceso de sumar y restar para que de la fecha que queremos que lo dejare al final de esto por si te interesar ver como resolví el problema de sumar y restar fechas, a lo mejor se puede hacer mucho más sencillo jejejej !

Bueno el caso es que eso funciona perfectamente (aunque aun me quedan muchas variables por probar jejejeje así que tan perfectamente no se yo ) pero cuando vamos a la opción dos nos encontramos con esto :

:neXt
set /p F_d=Introduce el dia en numero :
set /p F_m=Introduce el mes en numero :
set MeS=%F_m%
set elegirDia=%F_d%
goto neXt2
:neXt2
set /p frecuencia=1.semanalmente   2.Cada 15 dias    3.Cada 21 dias    4.Mensualmente
if %frecuencia%==1 (set elegirFrecuencia=%FRECUENCIA1% & goto nexT2)
if %frecuencia%==2 (set elegirFrecuencia=%FRECUENCIA2% & goto nexT2)
if %frecuencia%==3 (set elegirFrecuencia=%FRECUENCIA3% & goto nexT2)
if %frecuencia%==4 (set elegirFrecuencia=%FRECUENCIA4% & goto nexT2) else (echo El numero
    no corresponde con niguna frecuencia) & (goto neXt2 )

Y lo mando pal principio otra vez osea para esta formulita de acá:

:nexT2
set /a resultado_principal=%elegirDia%+%elegirFrecuencia%

Entonces me dio por probar la frecuencia 2 que seria 15 y como día puse el 09 y como mes el 09

y se vino la catástrofe !

s\citas>set /p F_d=Introduce el dia en numero :
Introduce el dia en numero : 09
\citas>set /p F_m=Introduce el mes en numero :
Introduce el mes en numero :09
\Gestor_de_citas\citas>set MeS=09
\Gestor_de_citas\citas>set elegirDia=09
\Gestor_de_citas\citas>goto neXt2
\Gestor_de_citas\citas>set /p frecuencia=1.semanalmente   2.Cada 15 dias    3.Cada 21 dias    4.Mensualmente
1.semanalmente   2.Cada 15 dias    3.Cada 21 dias    4.Mensualmente2
\Gestor_de_citas\citas>if 2 == 1 (set elegirFrecuencia=7   & goto nexT2 )
\\Gestor_de_citas\citas>if 2 == 2 (set elegirFrecuencia=15   & goto nexT2 )
\Gestor_de_citas\citas>set /a resultado_principal=09+15
Número no válido . Las constantes numéricas son decimales(17),
hexadecimales (0x11), u octales (021).
C:\Gestor_de_citas\citas>echo Esto es un pause para llamar al chequeo y verificar que el resultado principal de la fecha no es superior a "31" & pause1>nul
Esto es un pause para llamar al chequeo y verificar que el resultado principal de la fecha no es superior a "31"

Pues básicamente esto es todo lo que me se explicar, no se que más y parece ser que no me deja escribir más ! Un saludo y muchas gracias por llegar hasta aquí ! Corazoncito para ti ! Muaka!

1 respuesta

Respuesta
1

Voy a empezar por el final. Lo que te dice el mensaje es la pista. Para este "lenguaje" resulta que Las constantes numéricas son decimales(17), hexadecimales (0x11) u octales (021). Supongo que sabes qué significa que un número esté representado de forma decimal, hexadecimal u octal. Si no lo sabes puedo intentar explicártelo, pero por lo que cuentas me parece que eres perfectamente capaz de averiguarlo sin ayuda. Este mensaje te está indicando las distintas formas expresar el número 17, en forma decimal, tal cual, (17), en forma hexadecimal, añadiendo el prefijo "0x", (0x11) o en forma octal, añadiendo el prefijo "0", (021). Si expresas un número con el prefijo "0" tiene que ser octal, pero los números en octal solo utilizan las cifras de 0 a 7, por tanto "09" es inconsistente, porque le dices que es octal y sin embargo usas cifras no válidas en octal. Si en lugar de 09 para el día (creo que es el día el que te da el problema) pones 9 verás como desaparece el problema.

Intuyo que esto puede resolverte esta duda/problema, pero que te llevará a otras más. Por aquí estaré, si fuera el caso.

Muchísimas gracias por contestar! je je si la verdad que una vez que publique la pregunta pues soy muy ansioso y llegue a esa misma conclusión entonces empecé a investigar y base de prueba error y con un poco de ayuda de la lógica di con la combinación de números tal que así:

set DIA=%date:~1,1%
set MES=%date:~4,1%

y al final para que me salga la fecha  pues le hago pasar por esto:

if %D_A% LSS %qwe% (call :ses) else ( set DDD=%D_A%)
:sis
if %M_A% LSS %qwe% (call :ses1) else (set MMM=%M_A%)
:sus
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:ses
set DDD=0%D_A%
goto sis
:ses1
set MMM=0%M_A%
goto sus

Y como bien dices pues al darme cuenta de eso saltaron muchísimas otras cosas que ya modifique y jusito ahora estaba apunto de testear todo!

En cualquier caso aprovecho para comentarte que el comando start no me funciona bien, no se que pasa pero por ejemplo quiero ir de un archivo .bat en el disco C: al disco D: y de repente no entra se queda en negro y como si no terminara de entrar pero lo peor es que tampoco entra a un archivo que esta en el mismo disco y en la misma carpeta! No lo entiendo xD

Un par de cosas:
1. Para copiar el "código" de tu "programa" te sugiero que utilices el icono "<>" de la barra de herramientas (snippet). Le da más legilibilidad a las cosas al separarlo del texto de la consulta

2. Respecto al problema del START copia en un snippet, por ejemplo, el código completo del START y si puedes un pantallazo de la ventana negra que comentas.

por cierto , gracias por la explicación entendí perfectamente el rollo con el dato de que solo es hasta 07 jejej creo que podre aplicar eso en futuros problemas , y la verdad que tienes razón , era tan fácil como buscar información sobre que coño son esos números XD! la mente humana tan brillante para algunas cosas y tan absurdas para otras .... jejejejeje

aaaa coñooooo ! y yo preguntándome como se hacia eso otra prueba mas de lo relativa que es la estupidez y la inteligencia humana XD! , se pueden añadir varios e visto yo  pero a mi se me complica para poner dos XD !

cls
echo Accediendo ...
echo.
tree E:\Carpeta1T\
echo.
echo.
echo Pulsa enter para acceder
pause>nul
cd  E:
start puente.bat

Bueno, en cuanto al lo del start, ahora buscado pues la verdad es que lo de que salga la pantalla en negro eso no me pasa porque de tantas vueltas que le di , pues le acabe mandando ordenes de que hiciera esto pero aun así me sale el mensajito de que no encuentra el archivo .bat  pero en un principio tenia puesto como este ejemplo que no me funciona para abrir el zoom: " start C:\Users\D\AppData\Roaming\Zoom\bin\Zoom.exe"

y nose la verdad que el start no lo entiendo bien porque aveces funciona perfectamente y otras no! y tengo que acabar haciendo cosas así como descuartizando como digo yo para acabar entrando en los sitios, pero aveces lo de la pantalla negra es como si saliera del mi "programa" valga la redundancia jejejej , y se quedara lo del "símbolo del sistema" esperando que le inserte algún code.

Creo que me estás diciendo que, para el ejemplo concreto que me aportas, te sale un mensaje indicando que no encuentra el PUENTE.BAT. Obviamente este no sería el caso de la ventana negra de la que hablabas sino que habría que preceder al START de un comando tipo CD para que mostrara el directorio/carpeta sobre el que se está trabajando, con lo que podríamos comprobar que ese archivo no se encuentra en ese directorio/carpeta. La opción más segura es poner todo el PATH del archivo BAT.

Ahora me surge la duda de que el mensaje de que no encuentra el archivo se refiere al START para arrancar el Zoom. Si es así habría que revisar la sintaxis del START.

Supongo que ya lo habrás hecho pero, por si acaso, te sugiero que teclees START /? en una ventana CMD para obtener la ayuda de ese comando. A partir de lo que se lee ahí creo que el comando START correcto para lanzar Zoom sería:

START /D"C:\Users\D\AppData\Roaming\Zoom\bin" Zoom.exe

bua! Eres genial! Si conozco la ayuda en la ventada de CMD pero la verdad que hasta hoy no me ha llevado a ninguna solución pues me aun me cuesta entender bien todo técnicamente hablando.

Y debo comentarte que lo conseguido! Y aunque parezca que no tu ayuda a sido fundamental solo por el simple motivo de interactuar con alguien. Por un lado me motiva a estar más y mejor informado para interactuar de mejor manera y por otro lado pues me da la sensación de alivio.

Aquí esta mi pequeña obra de arte jejejeje:

:buscar_fecha_libre
cls
Echo.
echo                      ======================================
Echo "1. A partir de Hoy"
Echo.
Echo "2. A partir de una fecha en concreto"
echo                      ======================================
echo.
set /p elige= Apartir de...: 
echo.
echo.
if %elige%==1  (call :seguimosmai)
if %elige%==2 (goto :neXt) else (echo opcion inccorrecta )
goto buscar_fecha_libre
:seguimosmai
set elegirDia=%DIA% 
set MeS=%MES%
set /p frecuencia=1.semanalmente   2.Cada 15 dias    3.Cada 21 dias    4.Mensualmente
if %frecuencia%==1 (set elegirFrecuencia=%FRECUENCIA1% & goto nexT2) 
if %frecuencia%==2 (set elegirFrecuencia=%FRECUENCIA2% & goto nexT2) 
if %frecuencia%==3 (set elegirFrecuencia=%FRECUENCIA3% & goto nexT2) 
if %frecuencia%==4 (set elegirFrecuencia=%FRECUENCIA4% & goto nexT2) else (echo El numero 
    no corresponde con niguna frecuencia) & (goto seguimosmai) 
:nexT2
set /a resultado_principal=%elegirDia%+%elegirFrecuencia%
    call :chekeo
     Pause>nul
                    :Error
                    Echo Si sale esto hay un error!
                    goto error2
:Restar
Echo estamos en restar
Pause>nul
rem - - - - - - - - - - - - - - - - - - - - - - -   
       if %MeS%==1 (set restames=31) 
       if %MeS%==2 (set restames=28)
       if %MeS%==3 (set restames=31)
       if %MeS%==4 (set restames=30)
       if %MeS%==5 (set restames=31)
       if %MeS%==6 (set restames=30)
       if %MeS%==7 (set restames=31)
       if %MeS%==8 (set restames=31)
       if %MeS%==9 (set restames=30)
       if %MeS%==10 (set restames=31)
       if %MeS%==11 (set restames=30)
       if %MeS%==12 (set restames=31)
set a=1
       set /a dia=%resultado_principal%-%restames%
       set /a MESprincipal=%MeS%+%a%
pause>nul
if %MESprincipal%==2  (call :FEB)        
if %MESprincipal%==4  (call :ABR)      
if %MESprincipal%==6  (call :JUN)        
if %MESprincipal%==9  (call :SEPT)  
if %MESprincipal%==11 (call :NOV) 
if %MESprincipal%==12 (call :DIC) else (goto perfecto_en_resta)
:perfecto_en_resta 
Echo estamos en perfecto resta 
Pause>nul
Echo.
Echo.
Echo.
 if %dia% LSS 10 (call :QQQ)  else (set DDD=%dia%)
Pause>nul
:WQQ
  if %MESprincipal% LSS 10 (call:QQW) else (set MMM=%MESprincipal%)
  Pause>nul
  :wqw 
echo ----------------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% -------P-EN-R---------------
Echo.
Echo.
Echo.
Echo.
Pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:QQQ
set DDD=0%dia%
goto WQQ
:QQW
set MMM=0%MESprincipal%
goto :wqw
:FEB
set g=1
set h=28
echo estamos en FEB
if %dia% GTR 28 (call magior1) else (goto resultado_feb_final)
:magior1
set /a M_A=%MESprincipal%+%g%
set /a D_A=%dia%-%h%
pause>nul
if %D_A% LSS 10  (call :ses) else ( set DDD=%D_A%)
:sis
if %M_A% LSS 10  (call :ses1) else (set MMM=%M_A%)
:sus
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:ses 
set DDD=0%D_A%
goto sis
:ses1
set MMM=0%M_A%
goto sus
:resultado_feb_final
echo estamos en FEB_final
if %dia% LSS 10  (call :gag)else (set DDD=%dia%)
:gig
if %MESprincipal% LSS 10   (call :aga) (set MMM=%MESprincipal%)
:gug
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:gag
set DDD=0%dia%
goto gig
:aga
set MMM=0%MESprincipal%
goto gug
:ABR
set i=1
set j=30
echo estamos en ABR
if %dia% GTR 30 (Call :mavior1)  else (goto resultado_ABR_final)
:mavior1
set /a M_A=%MESprincipal%+%i%
set /a D_A=%dia%-%j%
pause>nul   
     if %D_A% LSS 10  (call :pap) else (set DDD=%D_A%)
:pap1
     if %M_A% LSS 10  (call :pup) else (set MMM=%M_A%)
:pup1
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:pap
set DDD=0%D_A%
goto pap1
:pup
set MMM=0%M_A%
goto pup1
:resultado_ABR_final
echo estamos en ABR_final
if %dia% LSS 10  (call :ooo) else (set DDD=%dia%)
:iui
if %MESprincipal% LSS 10 (call :uuu) else (set MMM=%MESprincipal%)
:uiu
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:ooo
set DDD=0%dia%
goto iui
:uuu
set MMM=0%MESprincipal%
goto uiu
:JUN
set e=1
set f=30 
echo estamos en JUN 
pause>nul
if %dia% GTR 30 (call :mafor1)  else (call :resultado_jun_final)
pause>nul 
:mafor1
set /a M_A=%MESprincipal%+%e%
set /a D_A=%dia%-%f%
pause>nul   
if %D_A% LSS 10  (call :vav) else (set DDD=%D_A%)
Pause>nul
:vav1
if %M_A% LSS 10  (call :he) else (set MMM=%M_A%)
pause>nul
:he1
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------           
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:vav
set DDD=0%D_A%
goto vav1
:he
set MMM=0%M_A%
goto he1
:resultado_jun_final
echo estamos en JUN_final 
pause>nul
if %dia% LSS 10 (call :dalet) else (set DDD=%dia%)
Pause>nul
:dalet1
if %MESprincipal% LSS 10 (call :nun) else (set MMM=%MESprincipal%)
pause>nul
:nun1
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:dalet
set DDD=0%D_A%
goto dalet1
:nun
set MMM=0%MESprincipal%
goto nun1
:SEPT
set c=1
set d=30
echo estamos en SEPT 
if %dia% GTR 30 (call :matror)  else (goto resultado_sept_final)
:matror
set /a M_A=%MESprincipal%+%c%
set /a D_A=%dia%-%d%
pause>nul    
if %D_A% LSS 10 (call :ABC ) else (set DDD=%D_A%)
rem----------------------------------
:cba
if %M_A% LSS 10 (call :ABC1) else (set MMM=%M_A%)
:cba1               
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%day%-%MMM%-%ANO%
goto registro_citas
:ABC
set DDD=0%D_A%
goto cba
:ABC1
set mez=0%M_A%
goto cba1
:resultado_sept_final
echo estamos en SEPT_final 
if %dia% LSS 10  (call :AA1) else (set DDD=%dia%)
:BB11
if %MESprincipal% LSS 10   (call :AA2) else (set MMM=%MESprincipal%)
:BB1
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:AA1
set DDD=0%dia%
goto BB11
:AA2 
set MMM=0%MESprincipal%
goto BB1
:NOV
set a=1
set b=30  
echo estamos en NOV 
if %dia% GTR %b% call :maror1 else (goto resultado_nov_final)
:maror1
set /a M_A=%MESprincipal%+%a%
set /a D_A=%dia%-%b%
pause>nul    
if %D_A% LSS 10  (call :rakata) else (set DDD=%D_A%)
:rakata1
if %M_A% LSS 10  (call :katarra) else (set MMM=%M_A%)
:katarra1           
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:rakata 
set DDD=0%D_A%
goto rakata1
:katarra
set MMM=0%M_A%
goto katarra1
:resultado_nov_final
echo estamos en NOV_final 
if %dia% LSS 10            (call :kok) else (set DDD=%dia%)
kok1
if %MESprincipal% LSS 10   (call :kik) else (set MMM=%MESprincipal%)
kik1
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:kok
set DDD=0%dia%
goto kok1
:kik
set MMM=0%MESprincipal%
goto kik1
:DIC
set k=31
set l=1
set m=11
echo estamos en DIC 
if %dia% GTR 31 (call :mayot1) else (goto resultado_dic_final)
:mayot1
  set /a N_N=%ANO%+%l%
  set /a D_A=%dia%-%k%
  set /a M_A=%MESprincipal%-%m%
  echo Feliz A_o Nuevo!!!! esta cita será para el "20%N_N%" 
pause>nul
if %D_A% LSS 10  (call :j1j ) else (set DDD=%D_A%)
:j1j1
if %M_A% LSS 10  (call :j2j) else (set MMM=%M_A%)
:j2j2
echo           ------------- La cita seria el dia %DDD%/%MMM%/%N_N% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%N_N%
goto registro_citas
:j1j
set DDD=0%D_A%
goto j1j1
:j2j
set MMM=0%M_A%
goto j2j2
:resultado_dic_final
echo estamos en diciembre final 
if %dia% LSS 10  (call :y1y) else (set DDD=%dia%)
:y1y1
if %MESprincipal% LSS 10  (call :y2y) else (set MMM=%MESprincipal%)
:y2y2
echo                     -------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% ---------------------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:y1y
set DDD=0%dia%
goto y1y1
:y2y
set MMM=0%MESprincipal%
goto y2y2
rem ================================================================================================================
:ok
set A=1
set B=2
set C=30
set D=31
set E=28
set F=11
echo estamos en ok
pause>nul
if %MeS%==2   (call :FEB2)
if %MeS%==4   (call :ABR2)
if %MeS%==6   (call :JUN2)
if %MeS%==9   (call :SEPT2)
if %MeS%==11  (call :NOV2)
if %MeS%==12 ( call :DIC2) else (goto perfecto_sin_resta)
:perfecto_sin_resta
Echo estamos en perfecto sin resta 
Pause>nul
Echo.
Echo.
Echo.
Echo.
if %diaOK% LSS 10  (call :Q1Q) else (set DDD=%diaok%)
:Q1Q1
if %MeS% LSS 10  (call :Q2Q) else (set MMM=%MeS%)
:Q2Q2
echo                     -------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% ---------------------------
echo.
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:Q1Q
set DDD=0%diaok%
goto Q1Q1
:Q2Q
set MMM=0%MeS%
goto :Q2Q2
:FEB2
echo estamos en feb2
if %resultado_principal% GTR %E% (call :mayoor1) else (goto resultado_feb_final2)
:mayoor1
set /a M_A=%MeS%+%A%
set /a D_A=%resultado_principal%-%E%
if %D_A% LSS 10  (call :k1k) else (set DDD=%D_A%)
:k1k1
if %M_A% LSS 10  (call:k2k) else (set MMM=%M_A%)
:k2k2
echo         ------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:k1k
set DDD=0%D_A%
goto k1k1
k2k
set MMM=0%M_A%
goto k2k2
:resultado_feb_final2
echo estamos en feb_final2
if %resultado_principal% LSS 10  (call :z1z) else (set DDD=%resultado_principal%)
:z1z1
if %MeS% LSS 10  (call :z2z) else (set MMM=%Mes%)
:z2z2
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:z1z
set DDD=0%resultado_principal%
goto z1z1
:z2z
set MMM=0%MeS%
goto z2z2
:ABR2
echo estamos en ABR2
if %resultado_principal% GTR %C% (call :mayorr1)  else (goto resultado_ABR_final2)
:mayorr1
set /a M_A=%MeS%+%A%
   set /a D_A=%resultado_principal%-%C%
pause>nul   
     if %D_A% LSS 10  (call :m1m) else (set DDD=%D_A%)
     :m1m1
     if %M_A% LSS 10  (call :m2m) else (set MMM=%M_A%)
echo         ------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:m1m
set DDD=0%D_A%
goto m1m1
:m2m
set MMM=0%M_A%
goto m2m2
:resultado_ABR_final2
echo estamos en abr_final2
if %resultado_principal% LSS 10  (call :h1h) else (set DDD=%resultado_principal%)
:h1h1
if %MeS% LSS 10  (call :h2h) else (set MMM=%MeS%)
:h2h2
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:h1h
set DDD=0%resultado_principal%
goto h1h1
:h2h
set MMM=0%MeS%
goto h2h2
:JUN2
echo estamos en jun2
if %resultado_principal% GTR %C% (call :mayor1) else (call :resultado_jun_final2) 
:mayor1
set /a M_A=%MeS%+%A% 
set /a D_A=%resultado_principal%-%C%
pause>nul   
if %D_A% LSS 10 (call :x1x) else (set DDD=%D_A%)
Pause>nul
:x1x1
if %M_A% LSS 10 (call :x2x) else (set MMM=%M_A%)
pause>nul 
:x2x2
echo         ------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:x1x
set DDD=0%D_A%
goto x1x1
:x2x
set MMM=0%M_A%
goto x2x2
:resultado_jun_final2
Echo estamos en jun final2
Pause>nul
if %resultado_principal% LSS 10 (call :c1c) else (set DDD=%resultado_principal%)
Pause>nul
:c1c1
if %MeS% LSS 10 (call :c2c) else (set MMM=%MeS% )
Pause>nul
:c2c2
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:c1c
set DDD=0%resultado_principal%
pause>nul
goto c1c1
:c2c
set MMM=0%MeS%
pause>nul
goto c2c2
:SEPT2
echo estamos es sept2 
if %resultado_principal% GTR %C% (call :makior1) else (goto resultado_sept_final2)
:makior1
set /a M_A=%MeS%+%A%
set /a D_A=%resultado_principal%-%C%
pause>nul    
if %D_A% LSS 10  (call :r2r) else (set DDD=%D_A%)
:r1r1
if %M_A% LSS 10  (call :r2r) else (set MMM=%M_A%) 
:r2r2           
echo         ------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:r1r
set DDD=0%D_A%
goto r1r1
:r2r
set MMM=0%M_A%
goto r2r2
:resultado_sept_final2
Echo estamos en sept final2 
Pause>nul
if %resultado_principal% LSS 10 (call :d1d) else (set DDD=%resultado_principal%)
Pause>nul
:d1d1
if %MeS%                 LSS 10 (call :d2d) else (set MMM=%MeS%)
Pause>nul
:d2d2
echo         ------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:d1d
set DDD=0%resultado_principal%
goto d1d1
:d2d
set MMM=0%MeS%
goto d2d2
:NOV2
echo estamos en nov2 
if %resultado_principal% GTR %C%(set /a M_A=%MeS%+%A%
set /a D_A=%resultado_principal%-%C%) else (goto resultado_nov_final2)
pause>nul    
echo. 
if %D_A% LSS 10  (call :t1t) else (set DDD=%D_A%)
:t1t1
if %M_A% LSS 10   (call :t2t) else (set MMM=%M_A%)             
:t2t2
echo         ------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:t1t
set DDD=0%D_A%
goto t1t1
:t2t
set MMM=0%M_A%
goto :t2t2
:resultado_nov_final2
echo estamos en nov final2 
if %resultado_principal% LSS 10  (call :u1u) else (set DDD=%resultado_principal%)
:u1u1
if %MeS%  LSS 10  (call :u2u) else (set MMM=%MeS%)
:u2u2
echo           ------------- La cita seria el dia %DDD%/%MMM%/%ANO% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:u1u
set DDD=0%resultado_principal%
goto u1u1
:u2u
set MMM=0%MeS%
goto :u2u2
:DIC2
echo estamos en DIC2
if %resultado_principal% GTR %D% (set /a N_N=%ANO%+%A%
  set /a D_A=%resultado_principal%-%D%
  set /a M_A=%MeS%-%F%) else (goto resultado_dic_final)
pause>nul
if %D_A% LSS 10  (call :j3j ) else (set DDD=%D_A%)
:j3j3
if %M_A% LSS 10  (call :j4j) else (set MMM=%M_A%)
:j4j4
echo           ------------- La cita seria el dia %DDD%/%MMM%/%N_N% ----------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%N_N%
goto registro_citas
:j3j
set DDD=0%D_A%
goto j13j3
:j4j
set MMM=0%M_A%
goto j4j4
:resultado_dic_final
echo estamos en diciembre final 
if %resultado_principal% LSS 10  (call :y3y) else (set DDD=%resultado_principal%)
:y3y3
if %MES% LSS 10  (call :y4y) else (set MMM=%MeS%)
:y4y4
echo                     -------------------------- La cita seria el dia %DDD%/%MMM%/%ANO% ---------------------------
pause>nul
set fechasMUL=%DDD%-%MMM%-%ANO%
goto registro_citas
:y3y
set DDD=0%resultado_principal%
goto y3y3
:y4y
set MMM=0%MeS%
goto y4y4
:neXt
Echo "Aqui recuerda que si el numero del Dia o del Mes es igual o inferior a 9 debes de ponerlo SIN EL CERO DELANTE"
echo.
set /p F_d=Introduce el dia en numero : 
set /p F_m=Introduce el mes en numero :
set MeS=%F_m%
set elegirDia=%F_d%
set /p frecuencia=1.semanalmente   2.Cada 15 dias    3.Cada 21 dias    4.Mensualmente
if %frecuencia%==1 (set elegirFrecuencia=%FRECUENCIA1% & goto nEn) 
if %frecuencia%==2 (set elegirFrecuencia=%FRECUENCIA2% & goto nEn) 
if %frecuencia%==3 (set elegirFrecuencia=%FRECUENCIA3% & goto nEn) 
if %frecuencia%==4 (set elegirFrecuencia=%FRECUENCIA4% & goto nEn) else (echo El numero 
    no corresponde con niguna frecuencia) & (goto neXt2 )
:nEn
set /a resultado_principal=%elegirDia%+%elegirFrecuencia%
:chekeo
echo estamos dentro del chek &pause>nul
if %resultado_principal%==1   (goto ok)   
if %resultado_principal%==2   (goto ok) 
if %resultado_principal%==3   (goto ok) 
if %resultado_principal%==4   (goto ok) 
if %resultado_principal%==5   (goto ok) 
if %resultado_principal%==6   (goto ok) 
if %resultado_principal%==7   (goto ok) 
if %resultado_principal%==8   (goto ok) 
if %resultado_principal%==9   (goto ok) 
if %resultado_principal%==10  (goto ok) 
if %resultado_principal%==11  (goto ok) 
if %resultado_principal%==12  (goto ok) 
if %resultado_principal%==13  (goto ok) 
if %resultado_principal%==14  (goto ok) 
if %resultado_principal%==15  (goto ok) 
if %resultado_principal%==16  (goto ok) 
if %resultado_principal%==17  (goto ok)  
if %resultado_principal%==18  (goto ok) 
if %resultado_principal%==19  (goto ok) 
if %resultado_principal%==20  (goto ok) 
if %resultado_principal%==21  (goto ok) 
if %resultado_principal%==22  (goto ok) 
if %resultado_principal%==23  (goto ok) 
if %resultado_principal%==24  (goto ok) 
if %resultado_principal%==25  (goto ok) 
if %resultado_principal%==26  (goto ok) 
if %resultado_principal%==27  (goto ok)  
if %resultado_principal%==28  (goto ok) 
if %resultado_principal%==29  (goto ok) 
if %resultado_principal%==30  (goto ok) 
if %resultado_principal%==31  (goto ok) else (goto restar)

te lo dejo por aquí no se eres ahora mismo la única persona en mi vida con la que comparto esta afición porque mi pareja le encanta las cosas que le hago pero cada vez que le cuenta algo dice venga vamos a practicar un poco de japones  jejeje !!! seguro que tu hubieras dado con esto en menos de un día jejeje  pero para mi llevo semanas en plan cavernicola dando vueltas y vueltas a mi cabeza para llegar hasta conseguir esto!!!!

Ahora por ejemplo el único problema que tengo que llevo toda la mañana buscado información. Incluso probé una idea tuya en respuestas que has dado tu a otra gente acerca de algo parecido. Pero no doy con la clave, el caso es una vez que la citas se queda registradas existe otro menú de visualizar citas que es otro archivo .bat que están entrelazados en si.

set /p respuesta3= 1.Buscar por NOMBRE_APELLIDO  2. Buscar por fechas 3. Ver el listado de fechas 4. Ir al menu principal
if %respuesta3%==1 (goto Buscar_nombres)
if %respuesta3%==2 (goto Buscar_fechas) 
if %respuesta3%==3 (goto ver_fechas)  else (echo Numero no corresponde con ninguna opcion.)
if %respuesta3%==4 (start /max "C:\Users\maria\Desktop\Oficina\Gestor_de_citas\Gestor_citas_2.bat") &exit 
goto menu 

bueno ese seria el menú del visualizador el problema lo tengo en el 1, buscar por NOMBRE_APELLIDO, pues digamos que tengo la carpeta "gestor_citas" dentro de esa tengo otra carpeta que se llama "citas" y dos archivos bat , uno para crear citas y otro para buscarlas y dentro de la carpeta citas se van creando mas carpetas con el nombre DIA_(fecha) y dentro de cada una de esas carpetas se crean archivos que se llaman: (hora)H_NOMBRE_APELLIDO.text ; intuyo que el comando FOR y el rollo de usar *_NOMBRE_APELLIDO es el que tengo que usar pero no se como.

O también vi otro comando que es el FINDSRT pero tampoco me ha quedado nada claro.

Justo entre otras cosas Llevo todo el día releyendo lo que me dice el CMD cuando le pregunto por FOR /? a ver si saco algo en claro pero ... XD

Entonces necesito digamos que mediante un set /p le inserte el NOMBRE_APELLIDO y busque ese archivo dentro de todas las subcarpetas de la carpeta citas.

Pues si pudiera echarme una manilla más con esto ... Si no pues igualmente te estoy agradecidísimo!

Rectifico! Sigo comprobando días y no lo conseguí del todo! No hay más verdad que "TODO SISTEMA TIENDE A FALLAR" es decir que el orden esta frito por irse al carajo! jejejejejej

Encantado de intentar echarte una mano, aunque para que sea efectiva tengo que entender bien la cuestión. Realmente te has montado un BAT tremendo. Yo sería incapaz de analizarlo pero, afortunadamente, otra cosa es poder ayudar en algún aspecto concreto.

Si te he entendido bien las citas del 8 de mayo de 2021 estarían, todas, dentro de la carpeta GESTOR_CITAS\CITAS\DIA_(08-05-2021). Por ejemplo si el cliente DA_RO tiene cita ese día a las 9:45, existirá en esa carpeta el archivo (09_45)H_DA_RO.TEXT lo que no impide que el mismo cliente tenga citas en otras fechas y/o a otras horas. Si lo que quieres es que cuando se seleccione la opción 1 y una vez tecleado el nombre del cliente se obtenga un listado con los campos FECHA HORA NOMBRE_APELLIDO esto podría servir:

@echo off
Setlocal EnableDelayedExpansion
set cliente=DA_RO
set carpeta=D:\carpeta prueba
pushd %carpeta%
echo FECHA      HORA  NOMBRE_APELLIDO
echo ---------- ----- -------------------------------------------
for /f "tokens=4,5* delims=\" %%a in ('dir /b/s *%cliente%.TEXT') do (
    set hora=%%b&set hora=!hora:~1,5!
    set fecha=%%a&set fecha=!fecha:~5,10!
    Echo ! Fecha! ! Hora! %Cliente%
    )
Popd

Por supuesto esto sería la base de la rutina Buscar_nombres en la que se solicitaría previamente el nombre_apellido del cliente. Si el path de la carpeta base de las citas tiene más componentes que, digamos, E:\GESTOR_CITAS habría que retocar los valores del TOKENS para ajustarlo a ese path. Imagino que te surgirán dudas, sobre todo si, como parece, no estás muy acostumbrado al FOR. Tú pregunta que intentaré responderte, cuando tenga un rato, eso sí.

Mientras preparaba esta respuesta he visto que has escrito algo más, lo que descolocará un poco la secuencia

bua genial! lo voy a probar inmediatamente jejje !

set carpeta=D:\carpeta prueba

Lo único que no me queda claro a priori es en ese SET ,que ruta poner , porque lo de que pusieras "D:" es simplemente parte del ejemplo , o hay que poner D: independientemente de que este la carpeta en el C: , se que es un poco absurdo pero me lio jejejje.Pero bueno en cualquier caso probare hasta dar con la clave e intentare que este funcionando antes de que me vuelvas a contestar jejej.

Pero espero que al poner ahí la ruta donde esta la carpeta C:\Users\m\Desktop\Oficina\Gestor_de_citas\citas

el FOR ese, sea capaz de buscar dentro de las subcarpetas de \citas y eso haga que el  resultado sea que se vea:

echo FECHA      HORA    NOMBRE_APELLIDO

Lo cual seria Magnifico!

Mil gracias de nuevo ! Esto es todo una aventura XD tengo ganas de conseguir todo esto

porque me eh propuesto a mi mismo cuando termine el gestor de citas y este funcione correctamente  me pondré a intentar entender otros lenguajes mas complejos y que sean mas versátiles jeje y bueno no quiero dejar de aprender .batch pero sin dudas tengo muchas ganas de ampliar las fronteras.

Usted , si entendieras del caso, en algún momento que tengas tiempo , ¿serias capaz de asesorarme o darme alguna idea de que lenguajes que  investigar, o indagar? porque claro es que buscando información por ahí veo tanta que es que aveces se me hace difícil aclararme y decidir  que mas lenguajes aprender, por ahora tengo claro que quiero aprender html, css y javasscript , tengo entendido que es actualmente lo básico para desarrollar web , pero me gustaría, no quedarme ahí , el problema que tengo yo personalmente es que da la sensación de que estudiar ciertos lenguajes te encasilla en algo predeterminado, pero después encuentro de vez en cuando otras corrientes que me motivan más, que de alguna manera estudian  las bases para entender casi cualquier lenguaje de programación, claro que esto ultimo no me es tan fácil encontrar y no se si hay algún nombre o algo en especial que se refiera a este tipo de estudio de los lenguajes de programación.

Y es que no se, realmente no tengo prisa en aprender puesto que  vas viendo los  resultados de lo que vas aprendiendo  al mismo tiempo que  aprendes y eso me fascina ya que es el aprendizaje natural de la vida el que se comporta así, que paradójicamente en el contexto no digital ya difícilmente vemos ese mismo comportamiento en las rutinas de aprendizaje cotidianas de un estudiante medio en las escuela o la universidad, este , supuestamente tiene que esperar años , tan solo para  ¡comenzar! a ver los resultado reales de lo aprendido.

Pero al igual que no tengo prisa en aprender , me gustaría no malgastar mi futuro tiempo investigando en lenguajes pues que al final me acaben encasillando o limitando de alguna manera.

Un saludo!


                    
Setlocal EnableDelayedExpansion
set /p cliente=Escribe el NOMBRE_APELLIDO : 
set carpeta=C:\Users\ma...\Desktop\Oficina\Gestor_de_citas\citas
pushd %carpeta%
echo FECHA      HORA  NOMBRE_APELLIDO
echo ---------- ----- -------------------------------------------
for /f "tokens=4,5* delims=\" %%a in ('dir /b/s *%cliente%.TEXT') do (
    set hora=%%b&set hora=!hora:~1,5!
    set fecha=%%a&set fecha=!fecha:~5,10!
    Echo ! Fecha! ! Hora! %Cliente%
    )
Popd
pause>nul

Definitivamente me ocurre lo que intuía y lo que creo entender que ya  me vienes avisando de lo de los valores del  TOKENS.


Eso es lo que ocurre , me pegare un rato jugando con el TOKENS a ver que pasa jejjeje!

Te actualizo un poco la propuesta para incorporar el path de la carpeta de citas y retocar los TOKENS del FOR:

@echo off
Setlocal EnableDelayedExpansion
set cliente=DA_RO
set carpeta=C:\Users\m\Desktop\Oficina\Gestor_de_citas\citas
pushd %carpeta%
echo FECHA      HORA  NOMBRE_APELLIDO
echo ---------- ----- -------------------------------------------
for /f "tokens=8,9* delims=\" %%a in ('dir /b/s *%cliente%.TEXT') do (
    set hora=%%b&set hora=!hora:~1,5!
    set fecha=%%a&set fecha=!fecha:~5,10!
    Echo ! Fecha! ! Hora! %Cliente%
    )
Popd

Creo que con esto, si rellenas la variable CLIENTE con el NOMBRE_APELLIDO de alguno de los que figuran en las citas podrás ver lo que te sale. Ya me contarás.

En cuanto a recomendaciones respecto a lenguajes de programación, en los últimos tiempos ha habido un "cambio de paradigma" (sea lo que sea lo que signifique eso) que no tienen que ver tanto con las bases estructurales de la programación, que siguen siendo secuencial (cuando las instrucciones van una detrás de otra), repetitiva (los bucles FOR y DO en todas sus variantes) y alternativa (los IF), como con el diseño de los tratamientos. Estoy hablando de la programación orientada a objetos (POO) que es un tema que no conozco muy bien (y he hecho algún intento pero no acabo de dominarlo) pero que sé que es por donde se mueve el "mercado" actual. Por tanto te recomendaría que te orientaras en ese sentido. Por ejemplo, de la misma forma que existe el lenguaje BATCH para la, digamos, shell MSDOS, existe otro lenguaje para la otra shell existente en Windows, Powershell, que ya incorpora, creo, la POO. Es un lenguaje muy potente y sin los problemas de los BAT. De hecho cuando no consigo resolver alguna cosa con un BAT siempre acabo encontrando una solución en Powershell.

Bueno, esto es un poco rollo, y más cuando se plantea en plan abstracto. Podría ponerte algún ejemplo concreto, si acabas teniendo alguna curiosidad.

Tengo entendido que para programación en entornos web está bastante de moda el lenguaje Python.

y por cierto no se si tendrá algo que ver para el tokens pero el archivo se quedan llamando así: 19-00.H_MARIA_PEREZ.text

Se me olvidó advertirte de que el editor de la página tiene la fea costumbre de separar los símbolos de admiración de las variables a las que acompaña. Aunque ponga "! Fecha!" y "! Hora!" en realidad no debe haber espacios entre la primera admiración y Fecha y Hora.

Para el tokens no pero para la variable hora sí. Tendría que ser:

set hora=%%b&set hora=!hora:~0,5!

BIEN casi lo conseguimos!!!!!! ;D , aquí el problema es que la fecha de esa clienta es a las 18H no a las 8 y ademas , hay otra cosita que se me paso por alto comentar jejej, y es que cada documento que se crea, ese por ejemplo seria "18-00.H_CRISTINA_GIL.text"

Pues dentro de ese documento, automáticamente  lo que hay es lo siguiente :

====================================================
Para el Dia :19-04-21                             
Tienes una cita a las 18:00 horas con CRISTINA_GIL
 - - - - - - - - - - -Notas - - - - - - - - - - - -  
                      - -  

Y en el caso de que hubiera una nota escrita a la hora de registrar la cita, aparecería donde ahora hay simplemente "- -" indicando justamente que esa cita no tiene ninguna nota añadida , mi idea era algo así como que el FOR buscara el  archivo  19-00.H_CRISTINA_GIL.text dentro de las subcarpetas de la carpeta \citas que esas se nombran tal que  "Dia_22_05_21" (por ejemplo) encontrara tal archivo porque se que el FOR puede encontrar archivos con el comodín * , dentro de todas las subcarpetas , si no me equivoco, y que a continuación  activara a lo mejor un TYPE con la información del documento o algo por el estilo.

Por eso el problema que yo me encuentro es el de hacer un FOR para que encuentre el archivo dentro de las subcarpetas de la carpeta \citas y lo muestre tal cual es el en el interior. No se si me he llegado a explicar mejor y si  se podría llegar a lograr algo así

HEY eres un crack , me respondiste antes de que me diera tiempo a terminar de escribir jajajja !

cambiando la variable de la hora, La hora sale perfectaemente  !  !!

Para la fecha sería:

set fecha=%%a&set fecha=!fecha:~4,8!

Si la nota que quieres sacar figura siempre en la quinta línea del archivo creo que también se podría incluir mediante una rutinilla de lectura del propio archivo.

Intuyo que dices la quinta línea porque es la línea donde dice -- ----NOTAS- - - - - -

Pero en ese caso las notas aparecerían siempre en la línea 6 y no creo que ocupen más de 2 o 4 líneas para abajo es decir como máximo desde la línea 6 hasta la 10, pero en general ocupan solo la línea 6.

Por cierto , no puedo valorarte más que una vez? no hay opción de re valorar las contestaciones o algo así ?

Si he entendido bien el texto de la cita tiene el formato:

====================================================
Para el Dia :19-04-21 
Tienes una cita a las 18:00 horas con CRISTINA_GIL
 - - - - - - - - - - -Notas - - - - - - - - - - - -  
                      - - 

Si es así el texto de la nota empieza en la línea 5. Si puede haber más de una línea no sé como encajarlo con el resto del "registro" Fecha/Hora/Cliente. Para una sola línea podría valer algo así:

Setlocal EnableDelayedExpansion
set /p cliente=Escribe el NOMBRE_APELLIDO : 
set carpeta=C:\Users\ma...\Desktop\Oficina\Gestor_de_citas\citas
pushd %carpeta%
echo FECHA    HORA  NOMBRE_APELLIDO                             NOTAS
echo -------- ----- ------------------------------------------- -----------------------------------
for /f "tokens=4,5* delims=\" %%a in ('dir /b/s *%cliente%.TEXT') do (
    for /f "usebackq skip=4 tokens=*" %%x in ("%carpeta%\citas\%%a\%%b") do set nota=%%x
    set hora=%%b&set hora=!hora:~0,5!
    set fecha=%%a&set fecha=!fecha:~4,8!
    Echo ! Fecha! ! Hora! %Cliente% ! Nota!
    )
Popd
Pause>nul

aunque habría que encontrar la forma de alinear la nota con la cabecera.

Respecto a la valoración, no te preocupes. Reconozco que me pareció un poco pobre, teniendo en cuenta que aunque no había hecho nada más que explicarte lo que preguntabas inicialmente, era lo que pedías. Pero nunca dejo que eso me influya gran cosa.

Lo que ya no llevo tan bien es que a veces la persona que pregunta o no lee la respuesta o le parece que no vale la pena probar lo que se sugiere o comentar nada al respecto. No pasa mucho, pero pasa y no puedo entenderlo.

¿Pero digo no hay manera de hacerlo? O no se la verdad es que no se que es como funciona, ni si se podía valorar más o que ! Mi intención era darte todo lo que pudiera! xD, de echo me metí aquí a preguntar porque varias cosas de las que he ido aprendiendo, ha sido gracias contestaciones, precisamente tuyas a otros usuarios en esta página que el buscador me encontró por lo que yo estaba buscando, y antes de contactar contigo ya me habías solucionado algún problema que otro! xD por eso mi intención era valorarte lo máximo posible dado que no sabia al cien por cien si contestarías y mira! Pero debido a mi ignorancia con la plataforma y relativamente en general no se que hice ! xD

Me gustaría dejar constancia ahora que leí su mensaje que si a mi me pasa eso como preguntador con usted, tenga claro que es que se me pasa por alto porque no la veo en el hilo o lo que sea, porque por ahora creo que lo único que he dejado de "lado" de lo que me has comentado (corrígeme si me equivoco por favor, porque para nada es mi intención crearle esas incomodidades vamos a llamar), es la parte del START, pero eso es debido a que hoy llevo todo el día dándole caña a esto que estamos desarrollando y pues la verdad que estoy centrado en esto, antes estuve probando lo del START y aun me sigue saltando la pantalla, pero como eso me frustra y con esto otro estoy avanzando bastante pues me he concentrado en esto básicamente para no liarme yo ni a ti tampoco. Porque al final en verdad ; lo del START es para poder entrar y salir de un archivo bat a otro sin tener que hacerlo manualmente, pero vamos que eso no es fundamental y es lo que más problemas me esta dando no entiendo muy bien porque entonces lo eh dejado aparcado.

Insisto, no te preocupes por eso. Hago esto porque me gusta y ahí es donde está mi mayor recompensa.

De ninguna manera me refería a ti en mi comentario respecto a los que no leen las respuestas. Es gente que parece abandonar el asunto, a veces ni siquiera comentan la primera respuesta. Te pongo un ejemplo reciente:

Proceso batch lectura de un archivo txt

Oye , aprovechando que estas aquí , la rutina esa algo esta fallando estoy dándole vueltas pero ya que estas aquí te pregunto

Lo he puesto tal que así:

Setlocal EnableDelayedExpansion
set /p cliente=Escribe el NOMBRE_APELLIDO :
set carpeta=C:\Users\m...\Desktop\Oficina\Gestor_de_citas\citas
pushd %carpeta%
    echo FECHA    HORA     NOMBRE_APELLIDO    NOTAS
    echo -------- -----    -----------------------------------------------------
     for /f "tokens=4,5* delims=\" %%a in ('dir /b/s *%cliente%.TEXT') do (
    for /f "usebackq skip=4 tokens=*" %%x in ("%carpeta%\citas\%%a\%%b") do set nota=%%x
    set hora=%%b&set hora=!hora:~0,5!
    set fecha=%%a&set fecha=!fecha:~4,8!
    Echo !Fecha!  !Hora!    %Cliente%         !Nota!
    )
Popd

y resulta que sale esto

y bueno me puse a fijarme y en [ for /f "usebackq skip=4 tokens=*" %%x in ("%carpeta%\citas\%%a\%%b") ] no se si tendrá algo que ver el que pongas la variable %carpeta% y que después le pongas de nuevo \citas , en cualquier caso lo probé de las dos maneras y me seguía dando error.

Y creo que estoy empezando a entender como funciona esto del FOR o digamos la lógica de lo que esta haciendo o eso quiero imaginar jejeje. y lo siguiente que voy a mirar es a ver si se me colo algún espacio por algún lado pero bueno, por si acaso no sea eso , te lo comento a ver que opinas.

Vale, intuyo cual es el problema, y es que sale como sale "top" y ofici", supongo que sera algo de que esos numeritos en algún sitio no están bien, por el tema a lo mejor de que en el path

set carpeta=C:\Users\maria\Desktop\Oficina\Gestor_de_citas\citas

Y "top" coincide con DesKtop y Ofici, con oficina.

Es lo único que se me ocurre jejej. Voy ponerme el reto de a ver si doy con la solución antes de que me contestes contrastando tu propuesta con la ayuda del FOR /? en el CMD, va a estar divertido ! xD

Es que además supongo que es algo relacionado con esto :[ %%a\%%b] si mi lógica no me falla, je je!

 cls
Setlocal EnableDelayedExpansion
set /p cliente=Escribe el NOMBRE_APELLIDO : 
set carpeta=C:\Users\maria\Desktop\Oficina\Gestor_de_citas\citas
pushd %carpeta%
    echo FECHA    HORA     NOMBRE_APELLIDO    NOTAS
    echo -------- -----    -----------------------------------------------------
     for /f "tokens=8,9* delims=\" %%a in ('dir /b/s *%cliente%.TEXT') do (
    for /f "usebackq skip=4 tokens=*" %%x in ("%carpeta%\%%a\%%b") do set nota=%%x
    set hora=%%b&set hora=!hora:~0,5!
    set fecha=%%a&set fecha=!fecha:~4,8!
    Echo ! Fecha! ! Hora! %Cliente% ! Nota!
    )
Popd
Pause>nul

siiiii! Lo CONSEGUIMOS! En efecto compañero! jajaja juraría que lo has puesto en plan acertijo! Si es así ha sido fenomenal para entender un poquito más la lógica del FOR ! Gracias por la rutinillaa va de lujo! tuve que cambiar el TOKENS y ponerlo de nuevo a 8,9, jejej porque  claro me di cuenta que delims =\ (no había caído en ese detalle de que \ eso eso lo mismo que \carpeta !, pero aun así aun no entiendo muy bien la lógica de que sea 8 y 9, porque por más que cuento no me salen las cuentas ! xD

A raíz de esto, me ha despertado curiosidades, que seguro que en algún futuro serán productivas

Como lo de investigar sobre el Setlocal y el Popd

No he podido atender tus últimos mensajes porque los fines de semana estoy un poco apurado. Me di cuenta de que había metido la pata en los valores de los TOKENS, y también que tienes razón en que hay que quitar el "citas" del FOR interno. Ambas cosas son consecuencia de los BAT de prueba que uso en mi entorno para intentar reproducir el tuyo.

Cuando en el DELIMS pones un valor, como el "\" de nuestro caso, se empiezan a generar "campos" de la línea. En este caso las líneas a tratar tienen un aspecto como:

C:\Users\m\Desktop\Oficina\Gestor_de_citas\citas\DIA_03-06-21\09-45H_DA_RO.text

El parámetro TOKENS indica cuales de esos campos se van a asignar a las variables del FOR (en este caso %%a y siguientes). Si cuentas los campos verás que el primero sería "C:", el segundo "Users", el octavo "DIA_03-06-21" y el noveno "09-45H_DA_RO.text". Como solo nos interesan estos dos últimos ponemos "TOKENS=8,9*" (el * significa que hay que tomar el resto de los campos si los hubiera y no sería necesario). De modo que a la variable %%a se le asigna el octavo campo y a la %%b el noveno.

El SetLocal debe ponerse cuando los bucles FOR pueden modificar los valores de algunas variables, en cuyo caso se deben invocar de la forma ! Variable! En lugar de %variable%, aunque sobre esto hay bastante "tela que cortar".

El PUSHD/POPD sirve para situarse en el directorio/carpeta que se indica en el PUSHD pero salvando el actual. El POPD restaura ese valor salvado. He empezado a usarlo recientemente y me parece muy cómodo.

Por eso no me salían las cuentas, ya que yo contaba las letras individuales xD,

Me a resultado muy divertido indagar en tu rutina! Así que no te preocupes, yo los fin de semanas estoy menos con el vicio este je je y gracias a tus pequeños errores en el sript eso se convirtió en una clase magistral de iniciación al FOR, se que aun me queda mucha tela que cortar como dices tu je je pero creo que voy entendiendo mucho mejor el FOR!

Me he propuesto un último reto! Al menos por ahora y empezar a jugar con otros lenguajes ( ultimo si se me dejan de ocurrir actualizaciones) xD

Voy a intentar que desde ese .bat genere automáticamente, otro .bat con el nombre de la fecha y ese .bat, la idea es que sea un cuestionario que rellenar, que al final de cada día de trabajo, pues pregunte has tenido una cita con "nosequien"¿se ha realizado, ha sido cancelada o pospuesta? Y una serie de preguntas de control, y este .bat generaría un documento de texto con el cuestionario relleno y algunos datos más, en general, de ese día en concreto.

Es decir quiero quiero que un .bat, cree diariamente otro archivo .bat para que este genere documentos de texto . no se si me he explicado !

Bueno el caso es que solo es, por si tienes alguna sugerencia o si alguna idea, je je si no ya te iré comentando esta nueva aventura:

:cuestionarioss
cd "C:\Users\maria\Desktop\Oficina\Gestor_de_citas\Cuestionario_dsps_citas\cuestionarios"
if exist %fechasMUL%.text (call :AGREGAR) else (call :CREAR)
:CREAR
echo -------------------------%fechasMUL%-------------------------------- >Cuestionario_del_dia_%fechasMUL%.text
echo ==================================================================== >>Cuestionario_del_dia_%fechasMUL%.text
cd..
echo @echo off>%fechasMUL%.bat 
Echo title ARchivo bat por dias>>%fechasMUL%.bat
echo color ED>>%fechasMUL%.bat
echo echo.>>%fechasMUL%.bat
echo echo Hola, hoy %fechasMul% has tenido estas citas:>>%fechasMUL%.bat
:AGREGAR
Echo Por favor escriba ortograficamente correto el Nombre sin baras bajas para generar el cuestionario post cita.
set /p Nombre=Escriba el Nombre : 
echo -------------------------%H_4%:%M_3%-------------------------------- >>Cuestionario_del_dia_%fechasMUL%.text
echo Has tenido una cita con %Nombre%
Echo echo A las %H_4%:%M_3% has tenido una cita con %Nombre%>>%fechasMUL%.bat

Por ahora esta es la primera idea que estoy barajando, (al code de arriba aun le falta muchas cosas por matizar pero es como la idea que tengo más o menos) un lado primero genero un archivo de texto en la carpeta \cuestionarios  con el nombre "Cuestionario_del_dia(fecha).text"

Voy una carpeta para atrás y le hago generar un archivo .bat que se llama (fecha).bat y mi idea es, pues al igual que puedo ir añadiendo líneas a un documento de texto, a medida que se registre alguien en una misma fecha, pues añadir líneas automáticamente al .bat que estas vayan haciendo el cuestionario.

Entonces la idea es que al final de cada día de trabajo, entrar en la carpeta \cuestionarios_dsps_citas y con tan solo abrir el .bat que indique la misma fecha del día actual, al abrirlo, irían saliendo todos los clientes de ese mismo día y haciendo las preguntas de control acerca de esa cita y este bat generaría automáticamente más líneas en el documento de texto que se genero al principio: "Cuestionario_del_dia_%fechasMUL%.text".

@echo off
title ARchivo bat por dias
Color ED
Echo.
Echo Hola, hoy %fechasMul% has tenido estas citas:
Pause>nul
echo a las %H_4%:%M_3% has tenido una cita con %Nombre%
Echo.
:cuestion1
set cuestion1=jfoadif
set /p cuestion1=Esta cita ha sido cancelada?: 1.Si  2.No
if %cuestion1%==jfoadif (goto cuestion1)
if %cuestion1%==1 (goto si1) else (goto no1)
if %cuestion1%==2 (goto si2) else (goto no2)
:si1
Echo ok cita cancelada
cd C:\Users\maria\Desktop\Oficina\Gestor_de_citas\Cuestionario_dsps_citas\cuestionarios
echo  cita cancelada>>Cuestionario_del_dia_%fechasMUL%.text  
goto siguiente_nombre1
:no1
:si2
:no2

Esa seria como el comienzo de la plantilla de las líneas que tendría que añadir al (fechas).bat

Y el primero problema al que me estoy enfrentado y dándole vueltas es que veo que, cada vez que añadiera líneas nuevas en el bat para crear el cuestionario a medida que se registran las citas, los " :cuestion1 " y todos los demás bucles o gotos esos (:loquesea ), siempre se llamarían igual y supongo, es evidente, que eso volvería loco al archivo bat al iniciarlo para rellenar el cuestionario, porque no sabría a que goto tiene que ir, porque todos se llamarían igual!

Ah y se me olvido comentar que donde pongo cd creo que voy a usar el rollo del pushd y el Popd, porque veo que la forma en la que lo usas tu es mucho más eficiente que estar dándole para adelante y para atrás manualmente a las carpetas.

No acabo de entender que el BAT de control tenga que ser modificado, aunque probablemente sea que no he captado del todo la idea. Con tu estructura de citas parece que no debería ser complicado crear un BAT que, a partir de la comprobación de la fecha actual, revise esa estructura para identificar las citas correspondientes a esa fecha y haga los controles pertinentes, siempre los mismos, claro.
Respecto a PUSHD/POPD lo que comentas fue, precisamente, lo que me pareció un gran hallazgo y, casi instintivamente, lo he incorporado a mis BAT. Además eso fomenta, creo, la buena costumbre de guardar en variables internas todas las cosas, incluso las que creemos que van a ser para siempre, porque si la final no lo son los cambios a realizar están bien identificados y no hay que recorrer todo el código para encontrarlos.

Je je si es un poco complejo de entender, pero creo al respecto, sin entender bien mi idea, tu idea es bastante más congruente que la mía, supongo que con el for se podrá hacer un bat que al introducir la fecha del día actual, el ya buscara los nombres y las horas y aplicara las preguntas de control que en efecto serán siempre las mismas.

Yo la locura que estoy intentando desarrollar es al registrar los clientes, (tal cliente tal día a tal hora) pues en el paso final justo antes de que venga el menú final que te pregunta si quieres volver atrás, o si quieres ir al menu principal o si quieres ir al otro bat que no es para registrar fechas si no para buscar citas ya concertadas y demás. Entonces mi idea es, justo antes de que llegue ese "menu final" pues meter un CALL y que lo lleve pues a esto xD:

:cuestionarioss
set carpeta=C:\Users\maria\Desktop\Oficina\Gestor_de_citas\Cuestionario_dsps_citas
pushd %carpeta%
cd cuestionarios 
if exist %fechasMUL%.text (call :AGREGAR) else (call :CREAR)
:CREAR
echo -------------------------%fechasMUL%--------------------- >Cuestionario_del_dia_%fechasMUL%.text
echo ========================================================= >>Cuestionario_del_dia_%fechasMUL%.text
cd..
echo @echo off>%fechasMUL%.bat 
echo title ARchivo bat por dias>>%fechasMUL%.bat
echo color ED>>%fechasMUL%.bat
echo cd cuestionarios>>%fechasMUL%.bat
echo echo.>>%fechasMUL%.bat
echo echo Hola, hoy %fechasMul% has tenido estas citas:>>%fechasMUL%.bat
:AGREGAR
Echo Por favor escriba ortograficamente correto el Nombre sin barras bajas para generar el cuestionario post cita.
set /p Nombre=Escriba el Nombre :
set /p apartado=1.Prviado 2.Asociacion 3.Colaboraciones : 
if %apartado%==1 (set aprt=PRIVADO)
if %apartado%==2 (set aprt=ASOCIACION)
if %apartado%==3 (set aprt=COLABORACIONES)
set /p V500=Escriba por favor, La primera letra del nombre y la primera del apellido en mayuscula y un numero aleatorio de mas de una cifra:
echo echo ---------------------%H_4%:%M_3%------------------- >>%fechasMUL%.bat
echo echo A las %H_4%:%M_3% tenias programada una cita con %Nombre%>>%fechasMUL%.bat
cd cuestionarios
echo echo ---------------------%H_4%:%M_3%------------------- >>Cuestionario_del_dia_%fechasMUL%.text
echo echo %Nombre%           Apartado: %aprt% >>Cuestionario_del_dia_%fechasMUL%.text
cd..                    
echo :%V500%_cuestion1>>%fechasMUL%.bat
echo set cuestion1=jfoadif >>%fechasMUL%.bat
echo set /p cuestion1=Esta cita ha sido cancelada?: 1.Si  2.No >>%fechasMUL%.bat
echo if %cuestion1%==jfoadif (goto cuestion1) >>%fechasMUL%.bat
echo if %cuestion1%==1 (goto %V500%si1) >>%fechasMUL%.bat 
echo if %cuestion1%==2 (goto %V500%no1) else (echo no corresponde) >>%fechasMUL%.bat
echo goto %V500%cuestion1 >>%fechasMUL%.bat
echo :%V500%si1 >>%fechasMUL%.bat
echo echo ok cita cancelada >>%fechasMUL%.bat
echo echo Esta cita ha sido cancelada.>> Cuestionario_del_dia_%fechasMUL%.text >>%fechasMUL%.bat
echo goto siguiente_nombre1 >>%fechasMUL%.bat
echo :%V500%no1 >>%fechasMUL%.bat
echo set /p cuestion11=Esta cita ha sido postpuesta?: 1.Si  2.No >>%fechasMUL%.bat
echo if %cuestion11%==1 (goto %V500%si2) >>%fechasMUL%.bat
echo if %cuestion11%==2 (goto %V500%no2) >>%fechasMUL%.bat
echo :%V500%si11 >>%fechasMUL%.bat
echo set /p cuestion111="Para que fecha?(00/00/00) :" >>%fechasMUL%.bat 
echo echo Esta cita ha sido postpuesta para el %cuestion111%. >>Cuestionario_del_dia_%fechasMUL%.text >>%fechasMUL%.bat
echo goto %V500%siguiente_nombre1 >>%fechasMUL%.bat
echo :%V500%no11 >>%fechasMUL%.bat
echo goto %V500%siguiente_cuestion2 >>%fechasMUL%.bat
echo :%V500%siguiente_cuestion2 >>%fechasMUL%.bat
echo set /p cuestion2=Se ha realizado el pago de la sesion? : 1.Si  2.No >>%fechasMUL%.bat
echo if %cuestion2%==1 (goto si2) >>%fechasMUL%.bat
echo if %cuestion2%==2 (goto no2) >>%fechasMUL%.bat
echo :%V500%si2 
echo set /p cuestion22=1.Pago Efectivo  2.Pago Transferencia 3.Bizum  4.Otra >>%fechasMUL%.bat 
echo if %cuestion22%==1 (set cuestion22=efectivo) >>%fechasMUL%.bat 
echo if %cuestion22%==2 (set cuestion22=transferencia) >>%fechasMUL%.bat
echo if %cuestion22%==3 (set cuestion22=bizum) >>%fechasMUL%.bat
echo if %cuestion22%==4 () >>%fechasMUL%.bat
echo "echo Ha realizado el pago correctamente en %cuestion222%  >>Cuestionario_del_dia_%fechasMUL%.text" >>%fechasMUL%.bat
echo :%V500%no2
echo set /p cuestion221=A continuación deja constancia de cuando pagara o de lo que quieras : >>%fechasMUL%.bat
echo "echo Esta cita se ha quedado pendiente del pago.          >>Cuestionario_del_dia_%fechasMUL%.text" >>%fechasMUL%.bat
echo "echo Se ha dejado constancia de : %cuestion221%           >>Cuestionario_del_dia_%fechasMUL%.text" >>%fechasMUL%.bat
echo echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  >>%fechasMUL%.bat
echo :%V500%siguiente_nombre >>%fechasMUL%.bat

Y intentare crear otro bat para que vaya autodestruyendo cuando ya el cuestionario del día quede relleno y solo se quede el documento de texto en su carpeta correspondiente.

Si te fijas lo primero que hago es crear un Archivo de text vacio que se llama (fecha) desde el bat principal (el gestor de citas) y a continuación gracias a ese archivo genero múltiples (fechas).bat diarios, que la función de esos bat seria hacer las preguntas de control de todos los clientes de ese día . jeje

No me siento capaz de decir nada sobre lo que estás montando, pero seguro que lo consigues. Me quedo en "retaguardia" por si puedo echarte una mano en un problema concreto, el "diseño" no es lo mío.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas