elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Calendario
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Calendario  (Leído 4,750 veces)
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
[Batch] Calendario
« en: 29 Agosto 2009, 07:38 am »

Hola, he realizado un calendario en batch. La idea es que se ejecute desde la línea de comandos, por ello si lo abren haciendo doble clic se abrirá y se cerrará.


« Última modificación: 6 Septiembre 2009, 23:11 pm por 0x0309 » En línea

M a t t

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: [Batch] Calendario
« Respuesta #1 en: 30 Agosto 2009, 02:23 am »

El mejor calendario que he visto, te felicito.


En línea

xassiz_

Desconectado Desconectado

Mensajes: 273


Ich werde dich töten..


Ver Perfil WWW
Re: [Batch] Calendario
« Respuesta #2 en: 31 Agosto 2009, 22:31 pm »

Código:
C:\> calend.bat

 Agosto de 2009
::::::::::::::::::::::::::::::
: l   m   m   j   v   s   d  :
::::::::::::::::::::::::::::::
:01 02 :
:03 04 05 06 07 08 09 :
:10 11 12 13 14 15 16 :
:17 18 19 20 21 22 23 :
:24 25 26 27 28 29 30 :
:(31):
::::::::::::::::::::::::::::::

Probado en vista, sale un poco deforme :P

Debe ser por el
Código:
set/p=x<nul


Muy bueno bro ^^

Felicidades  ;D
En línea



YXVuIGVyZXMgbWF0YWRvIHBhcmEgcG9uZXJ0ZSBhIGRlc2NpZnJhciBlc3RvIHhE
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [Batch] Calendario
« Respuesta #3 en: 2 Septiembre 2009, 08:01 am »

modificado, por encontrar un error grave en el código.
« Última modificación: 6 Septiembre 2009, 23:11 pm por 0x0309 » En línea

0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [Batch] Calendario
« Respuesta #4 en: 2 Septiembre 2009, 09:36 am »

modificado, por encontrar un error grave en el código.
« Última modificación: 6 Septiembre 2009, 23:11 pm por 0x0309 » En línea

xassiz_

Desconectado Desconectado

Mensajes: 273


Ich werde dich töten..


Ver Perfil WWW
Re: [Batch] Calendario
« Respuesta #5 en: 2 Septiembre 2009, 15:13 pm »

Esta muy bueno ;-)

Pero porque no funciona en Vista?

Yo pense que el fallo era de los espacios con set/p=<nul , pero ahora ya no hay espacios =/


bytes ;)
En línea



YXVuIGVyZXMgbWF0YWRvIHBhcmEgcG9uZXJ0ZSBhIGRlc2NpZnJhciBlc3RvIHhE
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [Batch] Calendario
« Respuesta #6 en: 6 Septiembre 2009, 23:16 pm »

Encontré un error grave en el código, en la función diaSemana que hacía que en los meses de noviembre y diciembre se mostrará el primer día del mes con uno que no correspondía, he codificado otra función en su reemplazo. Edité los posts anteriores, pues contenían código malo.
A continuación muestro el código funcional, y con las siguientes opciones:
-[language] -[show weeks numbers]
Código:
-[en|es|ge] -w

Pueden editar el código para seleccionar el idioma por defecto, en este caso es english, pero si lo quieren en español:
cambien:
Código:
(set lang=en)
por
Código:
(set lang=es)

Código:
@echo off
:calendario
::version 17:37 06-12-2000
::Fixed various errors.
::Switchs:
::-[language] -[show weeks numbers]
::-[en|es|ge] -w
::
::Compatible with windows vista
setlocal enableextensions enabledelayedexpansion

(set lang=en)
rem choose your default language.
rem lang en for english. ge for german. es for spanish.

for %%l in (en ge es) do (
if /i "-%%l"=="%~1" (set lang=%%l)
if /i "-%%l"=="%~2" (set lang=%%l)
)
(set /a showw=0)
for %%o in (w) do (
if /i "-%%o"=="%~1" (set /a showw=1)
if /i "-%%o"=="%~2" (set /a showw=1)
)

(set errorlevel=)
call :extFecha
call :diaSemana 1 "!m!" "!y!"
set /a ds=!errorlevel!
set /a tk=!m!
call :esBisiesto !y!
set /a b=!errorlevel!
if %m% equ 2 (if %b% equ 1 (
set /a tk=13))
for /f "tokens=%tk%" %%l in (
"31 28 31 30 31 30 31 31 30 31 30 31 29") do set /a limite=%%l
if %d% geq 10 (set dia=^(%d%^)) else (
set dia=^(0%d%^))
echo.
set meses[en]=January February March April May
set meses[en]=%meses[en]% June July August
set meses[en]=%meses[en]% September October November December
set meses[ge]=Januar Februar Maerz April Mai
set meses[ge]=%meses[ge]% Juni Juli August
set meses[ge]=%meses[ge]% September Oktober November Dezember
set meses[es]=Enero Febrero Marzo Abril Mayo
set meses[es]=%meses[es]% Junio Julio Agosto Septiembre
set meses[es]=%meses[es]%  Octubre Noviembre Diciembre
for /f "tokens=%m%" %%m in ("!meses[%lang%]!") do echo. %%m %y%
echo.
(set meses_m[en]=_Mo__Tu__We__Th__Fr__Sa__Su_)
(set meses_m[ge]=_Mo__Di__Mi__Do__Fr__Sa__So_)
(set meses_m[es]=_Lu__Ma__Mi__Ju__Vi__Sa__Do_)
set /a "nd=1"
call :nroSemana !nd! %m% %y%
set /a wn=!errorlevel!
if %showw% equ 1  (set /p "=____"<nul)
echo.!meses_m[%lang%]!
if %showw% equ 1 (call :wn1)
for /l %%s in (2,1,%ds%) do set /p "=...."<nul
set /a "r=8-ds"
for /l %%d in (1,1,%r%) do (
if %%d equ %d% (set /p "=%dia%"<nul) else (
set /p "=.0%%d."<nul))
if %showw% equ 1 (call :wn0 7)
echo.&if %showw% equ 1 (call :wn1)
set /a i=0
set /a r +=1
for /l %%d in (%r%,1,%limite%) do (
if %%d equ %d% (set /p "=%dia%"<nul) else (
if %%d geq 10 (set /p "=.%%d."<nul) else (
set /p "=.0%%d."<nul)
)
set /a i +=1
if !i! equ 7 (
if %showw% equ 1 (call :wn0 7)
set /a i=0&echo.&if %showw% equ 1 (
if %%d lss %limite% (call :wn1))
)
)
set /a i +=1
if %i% equ 1 (set /a i=8)
if %i% lss 8 for /l %%s in (%i%,1,7) do set /p "=...."<nul
echo.
goto :eof

:wn0
set /a "nd+=%~1"
call :nroSemana !nd! %m% %y%
set /a "wn=!errorlevel!"
goto :eof

:wn1
if !wn! lss 10 (set /p "=w0!wn!."<nul) else (
(set /p "=w!wn!."<nul))
goto :eof

:nroSemana
::call :nroSemana %dia% %mes% %año%
::return errorlevel
setlocal enableextensions enabledelayedexpansion
set /a "d=%~1,m=%~2,y=%~3"
call :esBisiesto %y%
set /a b=!errorlevel!
set /a "y_1=y-1"
call :esBisiesto %y_1%
set /a b_1=!errorlevel!
for /f "tokens=%m%" %%d in (
"0 31 59 90 120 151 181 212 243 273 304 334") do (
set /a doyn=%d%+%%d)
if %b% equ 1 (if %m% equ 2 (set /a doyn +=1))
call :diaSemana 1 1 %y%
set /a "j1wd=!errorlevel!"
set /a "wd=1+((doyn+j1wd-2)%%7),yn=y,ejw=8-j1wd"
if %doyn% leq %ejw% (if %j1wd% gtr 4 (
set /a "yn=y-1,wn=52"
if %j1wd% equ 5 (set /a "wn=53")
if %j1wd% equ 6 (if %b_1% equ 1 (set /a "wn=53")
)))
if %yn% equ %y% (if %b% equ 1 (
set /a "i=366") else (
set /a "i=365")
set /a "i_dyn=i-doyn,f_wd=4-wd"
if !i_dyn! lss !f_wd! (set /a "yn=y+1,wn=1")
if %yn% equ %y% (set /a "wn=(doyn+(7-wd)+(j1wd-1))/7"
if %j1wd% gtr 4 (set /a "wn -=1"))
)
exit /b !wn!

:diaSemana
::Basado en el algoritmo de Tomohiko Sakamot
::Retorn 1 Monday, 7 Sunday
setlocal enableextensions disabledelayedexpansion
for /f "tokens=* delims=0 eol=0" %%d in ("%~1") do set /a "d=%%d"
for /f "tokens=* delims=0 eol=0" %%m in ("%~2") do set /a "m=%%m"
set /a "y=%~3"
for /f "tokens=%m%" %%t in (
"0 3 2 5 0 3 5 1 4 6 2 4") do set /a "t=%%t"
if %m% lss 3 (set /a y-=1)
set /a "dw=(y+y/4-(y/100)+(y/400)+t+d)%%7"
if %dw% equ 0 (set /a dw=7)
exit /b %dw%

:esBisiesto
setlocal enableextensions disabledelayedexpansion
set y=%~1
set /a "b=(!(y%%4)&!!(y%%100))|!(y%%400)"
exit /b %b%

:extFecha
:: extract day month and year of the current date
:: Adapatacion del code de Herbert Kleebauer
:: Este codigo extrae en tres variables el contenido de la fecha
:: compatible con las distintas configuraciones regionales.
:: Retorna variables d,m,y que corresponden a dia mes año
setlocal enableextensions
set "date="
pushd "%Temp%"
:loop
set d="%date%"
echo.>-.-
if not %d%=="%date%" goto :loop
for /f "tokens=1-3 delims=0123456789 " %%i in (
"%date%") do set d=%%i%%j%%k
for /f "tokens=1-3 delims=%d% " %%i in (
"%date%") do set /a d=1%%i,m=1%%j,y=1%%k
if %d% gtr %m% (
   set d=%m%
   set m=%d%)
if %m% gtr %y% (
   set m=%y%
   set y=%m%)
if %d% gtr %m% (
   set d=%m%
   set m=%d%)
set /a d=%d%-100,m=%m%-100,y=%y%-10000
if %d% gtr 12 goto :eFEof
if %d% equ %m% goto :eFEof
if %m% gtr 12 (
   set m=%d%
   set d=%m%
   goto :eFEof)
xcopy /l /d:%m%-%d%-%y% -.- \|find "-.-" >nul
if errorlevel 1 goto :l1
xcopy /l /d:%d%-%m%-%y% -.- \|find "-.-" >nul
if not errorlevel 1 goto :eFEof
:l1
(set m=%d%
 set d=%m%)
:eFEof
del -.-
popd
(
endlocal
set y=%y%
set m=%m%
set d=%d%
)
setlocal enableextensions && goto :Eof
 

y produce:

Código:
C:\>kal -es

 Septiembre 2009

_Lu__Ma__Mi__Ju__Vi__Sa__Do_
.....01..02..03..04..05.(06)
.07..08..09..10..11..12..13.
.14..15..16..17..18..19..20.
.21..22..23..24..25..26..27.
.28..29..30.................

C:\>kal -es -w

 Septiembre 2009

_____Lu__Ma__Mi__Ju__Vi__Sa__Do_
w36......01..02..03..04..05.(06)
w37..07..08..09..10..11..12..13.
w38..14..15..16..17..18..19..20.
w39..21..22..23..24..25..26..27.
w40..28..29..30.................

C:\>


La opción -w muestra el número de la semana.
« Última modificación: 7 Septiembre 2009, 00:17 am por 0x0309 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Calendario RX
Foro Libre
KarlosVid(ÊÇ) 4 3,301 Último mensaje 22 Febrero 2011, 02:46 am
por urvreak
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines