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 (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.
¿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
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?
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
)
(http://img18.imageshack.us/img18/3369/captura2s.png)
Saludos.
Muchas gracias por darme la solución, esto es lo que estaba necesitando.