REM 获取当前日期 for /f "tokens=1-3 delims=/ " %%a in ('echo %date%') do ( set "day=%%a" set "month=%%b" set "year=%%c" )
时间: 2023-11-11 19:52:30 浏览: 266
这段代码是用于获取当前日期,并将结果分别存储在`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. 删除指定日期之前的备份目录。
至于您的问题,我不太明白您的意思,请再解释一下。
bat脚本筛选出文件内超过半年未修改的文件,筛选结果输入到当前目录的1.txt中,输出内容包含文件名、最后修改日期、大小、作者
可以使用以下的脚本来实现:
```batch
@echo off
setlocal enabledelayedexpansion
REM 设置半年的时间间隔,单位为天
set INTERVAL=183
REM 获取当前日期
for /f "usebackq" %%a in (`%__APPDIR__%wbem\wmic.exe Path Win32_LocalTime Get Day^,Month^,Year /Format:table ^| findstr "="`) do (
for /f "tokens=2 delims==" %%b in ("%%a") do set /a "now=%%b"
)
REM 遍历当前目录下的所有文件
for /r %%f in (*) do (
REM 获取文件最后修改日期
for /f "usebackq" %%a in (`%__APPDIR__%wbem\wmic.exe Path Win32_LogicalFileSecuritySetting Where "Path='%%~f'" Get LastModified /Format:table ^| findstr "="`) do (
for /f "tokens=2 delims==" %%b in ("%%a") do set "modified_date=%%b"
)
REM 计算修改日期与当前日期的差值
set /a "days_passed=now - modified_date"
REM 判断是否超过半年未修改
if !days_passed! geq %INTERVAL% (
REM 获取文件大小
for /f "usebackq" %%a in (`%__APPDIR__%where.exe %%~ff`) do set "file_size=%%~za"
REM 获取文件作者
for /f "usebackq tokens=2 delims==," %%a in (`%__APPDIR__%wbem\wmic.exe Path Win32_LogicalFileOwner Where "Path='%%~ff'" Get Owner /Format:csv ^| findstr /v "Owner"`) do set "file_author=%%~a"
REM 输出结果到1.txt
echo %%~nxf, !modified_date!, !file_size!, !file_author! >> 1.txt
)
)
```
解释一下脚本的具体实现:
1. 首先设置半年的时间间隔(单位为天),并获取当前日期。
2. 然后使用 `for /r` 命令遍历当前目录下的所有文件。
3. 对于每个文件,使用 WMIC 命令获取文件的最后修改日期,并计算出距离当前日期的天数差值。
4. 如果该差值超过半年(即 `INTERVAL` 变量),则获取文件的大小和作者,并将结果输出到 `1.txt` 文件中。
5. 最后,使用 `echo` 命令将结果输出到 `1.txt` 文件中。
需要注意的是,在获取文件大小和作者时,需要使用 `where` 命令获取文件的绝对路径,然后再使用 WMIC 命令获取文件的属性。此外,由于 WMIC 命令返回的字符串中包含了逗号,因此需要使用 `findstr` 命令去除掉 CSV 文件的标题行。
阅读全文