[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] bat如何新建明天的文件夹

大家好:

   md %date:~0,4%%date:~5,2%%date:~8,2%  可以新建格式为 YYYYMMDD的文件夹,但是请问如何新建 明天的文件夹?

修改系统时间,改成明天。
md之后,再把系统时间改回来就行了。

TOP

参考:http://bbs.bathome.net/thread-57851-1-1.html

  1. ::明天日期
  2. @echo off
  3. setLocal enableDelayedExpansion
  4. ::今天日期变数字
  5. set "today=%date:~0,4%%date:~5,2%%date:~8,2%"
  6. call :date2num today nday
  7. echo 日期 %today% 对应数字 %nday%
  8. ::pause
  9. ::goto :eof
  10. ::
  11. ::明天数字变日期
  12. call :num2date nday+1 tomorrow
  13. echo 数字 %nday%+1 对应日期 %tomorrow%
  14. cd/d%~dp0
  15. md %tomorrow%
  16. pause
  17. goto :eof
  18. ::====
  19. ::计算日期的天号。参数YYYYMMDD,输出num
  20. :date2num formatdate index
  21. setlocal
  22. set "fdate=!%1!"
  23. set/a y=1%fdate:~,4%-10000,m=1%fdate:~4,2%-100,d=1%fdate:~6,2%-100
  24. set/a y1=y-1,m3=(m-1)*3
  25. set/a "leap=^!(y%%4)&^!^!(y%%100)|^!(y%%400)",T2=28+leap
  26. set Mdays=+31+T2+31+30+31+30+31+31+30+31+30+31
  27. set/a days=d!Mdays:~,%m3%!
  28. set/a nday=y1/4-y1/100+y1/400+y1*365+days
  29. endlocal&set %2=%nday%
  30. goto :eof
  31. ::计算数字对应的日期。参数num,输出YYYYMMDD;调用函数Lyear数字是否超过一年及闰年
  32. :num2date num fdate
  33. setlocal
  34. set/a n=%1,year=1,y=n/366 %_估年_%
  35. set/a ny=(y/4-y/100+y/400)+y*365,y+=year,n-=ny
  36. :iyear 精算年份。                //多出的天一年一年加入
  37. call :Lyear n y flag leap
  38. if %flag%==0 goto :mday
  39. set/a y+=flag,n-=365+leap
  40. goto :iyear
  41. :mday 计算几月几日。        //leap在最后一次调用:Lyear函数时得出
  42. set/a T2=28+leap,m=1,d=n
  43. set Mdays=+31+T2+31+30+31+30+31+31+30+31+30+31
  44. for /l %%m in (36,-3,3)do (
  45.         set/a days=0!Mdays:~,%%m!
  46.         if %n% gtr !days! set/a m+=%%m/3,d=n-days&goto :outfor
  47. )
  48. :outfor
  49. set/a fy=10000+y,fm=100+m,fd=100+d
  50. set fdate=%fy:~-4%!fm:~-2!%fd:~-2%
  51. endlocal&set %2=%fdate%
  52. goto :eof
  53. ::根据数字年号判断是否加一年及闰年
  54. :Lyear num year flagYearAdd leap
  55. setlocal
  56. set/a n=%1,y=%2
  57. set/a "leap=^!^!(y%%100)&^!(y%%4)|^!(y%%400)"
  58. set/a Ydays=365+leap,fy=0
  59. if %n% gtr %Ydays% set fy=1
  60. endlocal&set %3=%fy%&set %4=%leap%
  61. goto :eof
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

本帖最后由 1152 于 2021-4-24 10:31 编辑
  1. @echo off
  2. set a=%date:~8,2%
  3. set n=%date:~0,4%
  4. if "%date:~5,2%"=="01" set sx=31
  5. if "%date:~5,2%"=="01" set sx=31
  6. if "%date:~5,2%"=="03" set sx=31
  7. if "%date:~5,2%"=="04" set sx=30
  8. if "%date:~5,2%"=="05" set sx=31
  9. if "%date:~5,2%"=="06" set sx=30
  10. if "%date:~5,2%"=="07" set sx=31
  11. if "%date:~5,2%"=="08" set sx=31
  12. if "%date:~5,2%"=="09" set sx=30
  13. if "%date:~5,2%"=="10" set sx=31
  14. if "%date:~5,2%"=="11" set sx=30
  15. if "%date:~5,2%"=="12" set sx=31
  16. if "%a:~0,-1%"=="0" set e=0
  17. set /a a=a+1
  18. if "%b:~0,-1%"=="0" set ed=0
  19. if "%b%" GTR "12" set b=01&set /a n=n+1
  20. set /a c=n/2
  21. set /a h=c*2
  22. if "%c%"=="%h%" set sx=29
  23. if "%a%" GTR "%sx%" set a=01&set /a b=b+1
  24. md %n%%eb%%b%%e%%a%
复制代码

TOP

回复 3# cutebe


    不用搞像0265年的了,代码短运行快

TOP

回复 5# 1152

4楼代码没有月份MM。日期+还要考虑跨月、跨年,闰年的2月也要正确。

    顺便问下:0265是啥?
如无特别说明,代码测试环境均为 XP SP3

TOP

增加一个参数可计算1~28天后的日期。
  1. ::第二天日期函数nextDay
  2. @echo off
  3. setLocal enableDelayedExpansion
  4. set "today=%date%"
  5. set "today=%today:-=%"
  6. set "today=%today:~,8%"
  7. echo/  今天日期 %today%
  8. call :nextDay tomorrow %today%
  9. echo/  明天日期 %tomorrow%
  10. set "idate=2021-02-27"
  11. set "idate=%idate:-=%"
  12. echo/     指定日期 %idate%
  13. call :nextDay pdate %idate%
  14. echo/  指定日期后一天 %pdate%
  15. pause
  16. goto :eof
  17. ::====完====
  18. ::计算第二天日期。
  19. :nextDay xdate tdate
  20. setlocal
  21. set "fdate=%2"
  22. set/a y=1%fdate:~,4%-10000,m=1%fdate:~4,2%-100,d=1%fdate:~6,2%-100
  23. set/a "leap=^!^!(y%%100)&^!(y%%4)|^!(y%%400)"
  24. set/a T2=28+leap,m3=m*3,d1=d
  25. set Mdays=dm+31+T2+31+30+31+30+31+31+30+31+30+31
  26. set/a dm=!Mdays:~%m3%,2!
  27. set/a dx=d1%%dm+1,ma=d1/dm,m1=m+ma-1,mx=m1%%12+1,ya=m1/12,yx=y+ya
  28. set/a YYYY=yx+10000,MM=mx+100,DD=dx+100
  29. set xdate=%YYYY:~-4%%MM:~-2%%DD:~-2%
  30. endlocal&set %1=%xdate%
  31. goto :eof
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

日期运算,用 powershell 简单灵活靠谱
  1. powershell "(get-date).adddays(+1) | get-date -format yyyyMMdd"
复制代码

TOP

  1. @echo off & cd /d "%~dp0"
  2. REM 获取后一天日期
  3. set "nextDay="
  4. set "code=mshta "javascript:var d=new Date();d.setDate(d.getDate()+1);new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(''+d.getFullYear()+('00'+(d.getMonth()+1)).replace(/^.*(.{2})$/,'$1')+('00'+d.getDate()).replace(/^.*(.{2})$/,'$1'));window.close();""
  5. for /f "delims=" %%i in ('%code%') do set "nextDay=%%i"
  6. echo %nextDay%
  7. mkdir "%nextDay%"
  8. pause&exit
复制代码

TOP

回复 6# cutebe


set /a c=n/2
set /a h=c*2
if "%c%"=="%h%" set sx=29
是判断是否是小数点
0265是265年

TOP

回复 1# 鲁班七号
  1. @echo off
  2. cd /d "%~dp0"
  3. set "DaysDiff=1"
  4. for /f %%i in ('powershell -c "Get-Date (Get-Date).AddDays(%DaysDiff%) -uformat "%%Y%%m%%d""') do (
  5.     set "DstDate=%%i"
  6. )
  7. md "%DstDate%"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表