Sumarle 1 mes a la fecha actual en batch

Iniciado por scalverth, 20 Septiembre 2012, 15:42 PM

0 Miembros y 1 Visitante están viendo este tema.

scalverth

Estoy tratando de ver la forma de hacer un script que a la fecha actual le sume un mes y el resultado se guarde en in archivo.txt, el problema me aparece por ejemplo con el mes 12, encontré un código en la siguiente web http://multingles.net/docs/jmt/sumdias.htm

@echo off
setlocal ENABLEEXTENSIONS
call :dias %1
set /a j+=%2
call :inc %j%
echo %dd%/%mm%/%yy%
endlocal
goto :EOF

:dias
for /f "tokens=1,2,3 delims=-/." %%a in ("%1") do (
   set dd=%%a&set mm=%%b&set yy=%%c)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
goto :EOF

:inc
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
goto :EOF


Y al final del código explica su forma de uso:
Si lo llamamos por ejemplo inc_fecha.cmd, la manera de invocarlo será:

inc_fecha  fecha  ndias

fecha: admite el formato:  dd.mm.aaaa, dd-mm-aaaa o dd/mm/aaaa
El resultado sumar los "ndias" tecleados a la fecha. (admite signo para restar días)
NOTA: la rutina es exacta teniendo presente la regla de bisiestos en centenarios.

Pero no me da el resultado deseado, alguien puede ayudarme por favor.

Eleкtro

#1
¿Porqué dices que no te funciona con el mes de Diciembre?


C:\>"Archivo.bat" "20-12-2012" "12"
01/01/2013

C:\>"Archivo.bat" "20-12-2012" "-12"
08/12/2012


Saludos








scalverth

El problema se me presenta al usar el comando de la siguiente manera:
C:\>"Archivo.bat" "%date%" "12"
El resultado es 02/10/2012, o sea me esta sumando 12 días, no 12 meses.
Tendré que ingresar la fecha de otra manera (20-12-2012) o hay que hacer algún cambio al código?

Eleкtro

#3
Cita de: scalverth en 20 Septiembre 2012, 18:16 PM
El problema se me presenta al usar el comando de la siguiente manera:
me esta sumando 12 días, no 12 meses.

Pero es que la función de ese script es sumar días, no meses, en el mismo título lo pone bien claro :-\.
CitarMediante fichero batch: sumar dÍas a una fecha
Funcionar, funciona...


A ver si este code que hago te sirve (Además de sumar los meses, modifica la fecha del PC con la nueva fecha generada):

PD: No es perfecto al calcular la diferencia de los días (Ej. Febrero)

@Echo off

:: By Elektro H@cker

REM Call :ADD_MONTH [FECHA] [MESES]
REM
REM Ejemplo:

Call :ADD_MONTH 01-01-2012 12
Call :ADD_MONTH 31-01-2013 1

Pause&Exit

::::::::::::::::::::::::::::::::::::

:ADD_MONTH
Setlocal enabledelayedexpansion

Set "Current_Date=/%DATE%" & Set "Current_Date=!Current_Date:/0=/!" & Set "Current_Date=!Current_Date:~1!"

Set "Custom_Date=-%~1" & Set "Custom_Date=!Custom_Date:-=/!"  & Set "Custom_Date=!Custom_Date:.=/!" & Set "Custom_Date=!Custom_Date:/0=/!" & Set "Custom_Date=!Custom_Date:~1!"

For /F "Tokens=1-3 delims=/" %%A in ('Echo "%Custom_Date%"') DO (Set /A "DD=%%A", "MM=%%B", "YYYY=%%C", "X=%~2")

For /L %%# in (1,1,%X%) DO (
Set /A "COUNT+=1"
If "!MM!" EQU "12" (Set /A "MM=0, YYYY+=1", "COUNT+=0")
Set /A "MM+=1"
)

Echo Fecha actual     : %Current_Date%
Echo Fecha introducida: %Custom_Date%
Echo Agregar meses    : %~2


Echo %DD%/%MM%/%YYYY% | DATE >NUL && Echo Nueva fecha      : %DD%/%MM%/%YYYY% | MORE || (Call :Retry)
ENDLOCAL
Goto:EOF

:Retry
For /L %%# in (1,1,31) DO (
set /A "DD-=1"
Echo !DD!/%MM%/%YYYY% | DATE >NUL && Echo Nueva fecha      : !DD!/%MM%/%YYYY% | MORE && Goto:EOF
)




Saludos.








scalverth

Muchas gracias por darme la solución, esto es lo que estaba necesitando.