Board logo

标题: [日期时间] bat如何新建明天的文件夹 [打印本页]

作者: 鲁班七号    时间: 2021-4-23 09:22     标题: bat如何新建明天的文件夹

大家好:

   md %date:~0,4%%date:~5,2%%date:~8,2%  可以新建格式为 YYYYMMDD的文件夹,但是请问如何新建 明天的文件夹?
作者: 路过    时间: 2021-4-23 23:27

修改系统时间,改成明天。
md之后,再把系统时间改回来就行了。
作者: cutebe    时间: 2021-4-24 00:10     标题: 参考: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
复制代码

作者: 1152    时间: 2021-4-24 10:14

本帖最后由 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%
复制代码

作者: 1152    时间: 2021-4-24 10:34

回复 3# cutebe


    不用搞像0265年的了,代码短运行快
作者: cutebe    时间: 2021-4-24 11:07

回复 5# 1152

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

    顺便问下:0265是啥?
作者: cutebe    时间: 2021-4-24 11:09

增加一个参数可计算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
复制代码

作者: newswan    时间: 2021-4-24 11:21

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

作者: went    时间: 2021-4-24 11:36

  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
复制代码

作者: 1152    时间: 2021-4-24 16:06

回复 6# cutebe


set /a c=n/2
set /a h=c*2
if "%c%"=="%h%" set sx=29
是判断是否是小数点
0265是265年
作者: Batcher    时间: 2021-4-25 22:01

回复 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%"
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2