标题: [日期时间] 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
- ::明天日期
- @echo off
- setLocal enableDelayedExpansion
-
- ::今天日期变数字
- set "today=%date:~0,4%%date:~5,2%%date:~8,2%"
- call :date2num today nday
- echo 日期 %today% 对应数字 %nday%
- ::pause
- ::goto :eof
- ::
-
- ::明天数字变日期
- call :num2date nday+1 tomorrow
- echo 数字 %nday%+1 对应日期 %tomorrow%
-
- cd/d%~dp0
- md %tomorrow%
-
- pause
- goto :eof
- ::====
-
-
- ::计算日期的天号。参数YYYYMMDD,输出num
- :date2num formatdate index
- setlocal
- set "fdate=!%1!"
- set/a y=1%fdate:~,4%-10000,m=1%fdate:~4,2%-100,d=1%fdate:~6,2%-100
- set/a y1=y-1,m3=(m-1)*3
- set/a "leap=^!(y%%4)&^!^!(y%%100)|^!(y%%400)",T2=28+leap
- set Mdays=+31+T2+31+30+31+30+31+31+30+31+30+31
- set/a days=d!Mdays:~,%m3%!
- set/a nday=y1/4-y1/100+y1/400+y1*365+days
- endlocal&set %2=%nday%
- goto :eof
-
- ::计算数字对应的日期。参数num,输出YYYYMMDD;调用函数Lyear数字是否超过一年及闰年
- :num2date num fdate
- setlocal
- set/a n=%1,year=1,y=n/366 %_估年_%
- set/a ny=(y/4-y/100+y/400)+y*365,y+=year,n-=ny
- :iyear 精算年份。 //多出的天一年一年加入
- call :Lyear n y flag leap
- if %flag%==0 goto :mday
- set/a y+=flag,n-=365+leap
- goto :iyear
- :mday 计算几月几日。 //leap在最后一次调用:Lyear函数时得出
- set/a T2=28+leap,m=1,d=n
- set Mdays=+31+T2+31+30+31+30+31+31+30+31+30+31
- for /l %%m in (36,-3,3)do (
- set/a days=0!Mdays:~,%%m!
- if %n% gtr !days! set/a m+=%%m/3,d=n-days&goto :outfor
- )
- :outfor
- set/a fy=10000+y,fm=100+m,fd=100+d
- set fdate=%fy:~-4%!fm:~-2!%fd:~-2%
- endlocal&set %2=%fdate%
- goto :eof
-
- ::根据数字年号判断是否加一年及闰年
- :Lyear num year flagYearAdd leap
- setlocal
- set/a n=%1,y=%2
- set/a "leap=^!^!(y%%100)&^!(y%%4)|^!(y%%400)"
- set/a Ydays=365+leap,fy=0
- if %n% gtr %Ydays% set fy=1
- endlocal&set %3=%fy%&set %4=%leap%
- goto :eof
复制代码
作者: 1152 时间: 2021-4-24 10:14
本帖最后由 1152 于 2021-4-24 10:31 编辑
- @echo off
- set a=%date:~8,2%
- set n=%date:~0,4%
- if "%date:~5,2%"=="01" set sx=31
- if "%date:~5,2%"=="01" set sx=31
- if "%date:~5,2%"=="03" set sx=31
- if "%date:~5,2%"=="04" set sx=30
- if "%date:~5,2%"=="05" set sx=31
- if "%date:~5,2%"=="06" set sx=30
- if "%date:~5,2%"=="07" set sx=31
- if "%date:~5,2%"=="08" set sx=31
- if "%date:~5,2%"=="09" set sx=30
- if "%date:~5,2%"=="10" set sx=31
- if "%date:~5,2%"=="11" set sx=30
- if "%date:~5,2%"=="12" set sx=31
- if "%a:~0,-1%"=="0" set e=0
- set /a a=a+1
- if "%b:~0,-1%"=="0" set ed=0
- if "%b%" GTR "12" set b=01&set /a n=n+1
- set /a c=n/2
- set /a h=c*2
- if "%c%"=="%h%" set sx=29
- if "%a%" GTR "%sx%" set a=01&set /a b=b+1
- 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天后的日期。- ::第二天日期函数nextDay
- @echo off
- setLocal enableDelayedExpansion
-
- set "today=%date%"
- set "today=%today:-=%"
- set "today=%today:~,8%"
- echo/ 今天日期 %today%
- call :nextDay tomorrow %today%
- echo/ 明天日期 %tomorrow%
-
- set "idate=2021-02-27"
- set "idate=%idate:-=%"
- echo/ 指定日期 %idate%
- call :nextDay pdate %idate%
- echo/ 指定日期后一天 %pdate%
-
- pause
- goto :eof
- ::====完====
-
- ::计算第二天日期。
- :nextDay xdate tdate
- setlocal
- set "fdate=%2"
- set/a y=1%fdate:~,4%-10000,m=1%fdate:~4,2%-100,d=1%fdate:~6,2%-100
- set/a "leap=^!^!(y%%100)&^!(y%%4)|^!(y%%400)"
- set/a T2=28+leap,m3=m*3,d1=d
- set Mdays=dm+31+T2+31+30+31+30+31+31+30+31+30+31
- set/a dm=!Mdays:~%m3%,2!
- set/a dx=d1%%dm+1,ma=d1/dm,m1=m+ma-1,mx=m1%%12+1,ya=m1/12,yx=y+ya
- set/a YYYY=yx+10000,MM=mx+100,DD=dx+100
- set xdate=%YYYY:~-4%%MM:~-2%%DD:~-2%
- endlocal&set %1=%xdate%
- goto :eof
复制代码
作者: newswan 时间: 2021-4-24 11:21
日期运算,用 powershell 简单灵活靠谱- powershell "(get-date).adddays(+1) | get-date -format yyyyMMdd"
复制代码
作者: went 时间: 2021-4-24 11:36
- @echo off & cd /d "%~dp0"
- REM 获取后一天日期
- set "nextDay="
- 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();""
- for /f "delims=" %%i in ('%code%') do set "nextDay=%%i"
- echo %nextDay%
- mkdir "%nextDay%"
- 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# 鲁班七号 - @echo off
- cd /d "%~dp0"
- set "DaysDiff=1"
- for /f %%i in ('powershell -c "Get-Date (Get-Date).AddDays(%DaysDiff%) -uformat "%%Y%%m%%d""') do (
- set "DstDate=%%i"
- )
- md "%DstDate%"
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |