REM 获取当前日期 for /f "tokens=1-3 delims=/ " %%a in ('echo %date%') do ( set "day=%%a" set "month=%%b" set "year=%%c" )
时间: 2023-11-11 20:52:30 浏览: 241
这段代码是用于获取当前日期,并将结果分别存储在`day`、`month`和`year`这三个变量中。
在这个代码块中,使用`for /f`命令来处理输出的日期字符串。具体的解析方式如下:
- `tokens=1-3`指示将日期字符串分割成三个部分,分别存储在`%%a`、`%%b`和`%%c`这三个变量中。
- `delims=/`指定日期字符串中的分隔符为斜杠`/`和空格,以便正确分割日期的不同部分。
- `'echo %date%'`是一个命令,用于输出当前日期字符串。该命令的输出将被`for /f`命令读取并进行解析。
解析后,将得到的日期部分分别存储在`day`、`month`和`year`这三个变量中。
请注意,在不同的操作系统和区域设置下,日期字符串的格式可能会有所差异。因此,如果您发现日期解析不正确,请根据您的操作系统和日期格式进行适当的调整。
希望能对您有所帮助!如果有其他问题,请随时提问。
相关问题
@echo off setlocal enabledelayedexpansion :Main cls :: 日期可以带星期,但是,必须以年月日的顺序排列 :: 年份必须是四位,否则会出错 set day=%date% set days=0 echo.&echo. echo 指定的日期是:%day% echo. rem 指定要追溯的天数 set input=5 :: 提取日期 for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do ( set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100 ) set /a sd-=input if %sd% leq 0 call :count cls echo.&echo. echo 指定的日期是:%day% echo. set sm=0%sm% set sd=0%sd% set olddt=%sy%%sm:~-2%%sd:~-2% echo %input% 天前的日期是:%olddt% set yyyy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% rem set /a currdt= yyyy*10000+mm*100+dd set currdt=%date:~0,4%%date:~5,2%%date:~8,2% echo 当前日期是:%currdt% set dt=%date:~0,4%_%date:~5,2%%date:~8,2% REM 把 : 都替换成 -,空格替换成0 set dt=%dt::=-% set dt=%dt: =0% mkdir D:\bf\%currdt% echo 开始备份:%currdt% expdp systemcore/systemcore@ABCD dumpfile=expdp%dt%.dmp logfile=expdp.log full=y copy /y D:\bf\expdp.dmp D:\bf\%currdt%\\ copy /y D:\bf\expdp.log D:\bf\%currdt%\\ del/f/q D:\bf\expdp.dmp del/f/q D:\bf\expdp.log echo 删除过期备份: %olddt% rd D:\bf\%olddt% /s /q goto :eof :count set /a sm-=1 if !sm! equ 0 set /a sm=12, sy-=1 call :days set /a sd+=days if %sd% leq 0 goto count goto :eof :days :: 获取指定月份的总天数 set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)" set /a max=28+leap set num=0 set str=31 %max% 31 30 31 30 31 31 30 31 30 31 for %%i in (%str%) do ( set /a num+=1 if %sm% equ !num! set days=%%i&goto :eof ) goto :eof --是这样加吗?
这段代码是一个Windows批处理脚本,用于备份Oracle数据库。主要实现了以下功能:
1. 获取当前日期,计算指定天数之前的日期;
2. 使用expdp命令备份数据库,并将备份文件和日志文件复制到指定目录下;
3. 删除指定日期之前的备份目录。
至于您的问题,我不太明白您的意思,请再解释一下。
批处理获取昨天所属月的开始和结束时间
可以使用以下批处理代码来获取昨天所属月的开始和结束时间:
```
@echo off
rem 获取当前日期
set "today=%date%"
rem 将日期格式转换为 yyyy-mm-dd 的格式
for /f "tokens=1-3 delims=/" %%a in ("%today%") do set "today=%%c-%%a-%%b"
rem 计算昨天的日期
set /a "day=1%today:~-2%-100, month=1%today:~-5, month-=1, year=%today:~0,-6%"
if %month% equ 0 set /a "year-=1, month=12"
set /a "days=36525*(year+4716)/100/4-306001*(month+1)/10000*2+((month+1)*275/9+day-30)"
rem 将日期格式转换为 yyyy-mm-dd 的格式
set "yesterday=%year%-%month%-%days%"
rem 获取昨天所属月的开始和结束时间
for /f "tokens=1-3 delims=-" %%a in ("%yesterday%") do (
set "start=%year%-%month%-01 00:00:00"
set /a "last_day=30+(%%b==4 || %%b==6 || %%b==9 || %%b==11)+(%%b==2)*(-2+!(%%a%%4))"
set "end=%year%-%month%-%last_day% 23:59:59"
)
echo Yesterday: %yesterday%
echo Start time: %start%
echo End time: %end%
```
解释:
首先获取当前日期,然后将其转换为 `yyyy-mm-dd` 的格式。接着使用批处理中的算术运算和日期计算方式计算出昨天的日期。然后将其转换为 `yyyy-mm-dd` 的格式。
最后使用当前年月和昨天所属月的最后一天来计算昨天所属月的开始和结束时间。注意,月份的天数需要根据是否为闰年来判断。
阅读全文