标题: [日期时间] 批处理如何获取昨日或者前日创建的文件? [打印本页]
作者: allen3371 时间: 2020-3-2 09:52 标题: 批处理如何获取昨日或者前日创建的文件?
比如,我想获取昨日创建的文件,或者前天创建的文件,不知道有什么办法吗?
作者: Batcher 时间: 2020-3-2 10:26
回复 1# allen3371
http://bbs.bathome.net/thread-3334-1-1.html
把代码里面的 del 命令去掉试试
作者: allen3371 时间: 2020-3-2 10:36
回复 2# Batcher
谢谢,不过我是想获取昨日创建的文件,而不是昨日之前的文件
作者: allen3371 时间: 2020-3-2 10:59
谢谢,我用for 和 dir 语句来获取了...已经搞定
作者: Gin_Q 时间: 2020-3-2 11:31
- @echo off & setlocal enabledelayedexpansion &rem by author Gan
- ::必须需要设置系统时间格式为:2020/02/02
- ::设置天数
- set /a nd=1
- ::设置路径
- set "f_path=D:\"
- ::Begin
- call :runnian %date:~0,4%
- call :test
- if !m! lss 10 set m=0!m!
- if !d! lss 10 set d=0!d!
- set "limit=!y!/!m!/!d!"
- echo 指定日期为:%limit%
- for /r "%f_path%" %%a in (*) do (set "file_t=%%~ta"
- set "file_t=!file_t:~0,10!
- if "%limit%" equ "!file_t!" echo %%~dpnxta
- )
- echo Done^^!
- pause&exit /b 0
-
- :test
- for /f "tokens=1-3 delims=/ " %%a in ("%date%") do (set /a y=%%a, m=1%%b%%100, d=1%%c%%100)
- if !nd! lss %d% (set /a d-=nd & goto :eof)
- set /a nd-=d, m-=1
- :loop
-
- for /l %%a in (1,1,2) do (
- if !m! LEQ 0 (set /a m=12, y-=1 & call :runnian !y!)
- set /a md = m!m!
- if !nd! lss !md! (set /a d=md-nd & goto :eof)
- set /a nd-=md, m-=1
- goto :loop)
-
- :runnian
- set /a m1=31, m2=28, m3=31, m4=30, m5=31, m6=30, m7=31, m8=31, m9=30, m10=31, m11=30, m12=31
- set /a n=0
- set /a a=%1%%4,a1=%1%%100,a2=%1%%400
- if !a! equ 0 set n=1& if !a1! equ 0 set n=0
- if !a2! equ 0 set n=1
- if !n! equ 1 (set /a m2=29) else (set /a m2=28)
- goto :eof
复制代码
作者: Batcher 时间: 2020-3-2 12:56
回复 4# allen3371
能否把你的代码发出分享一下?
作者: zaqmlp 时间: 2020-3-2 15:01
- @echo off
- set info=互助互利,支付宝扫码头像,感谢打赏
- rem 有问题,可加QQ956535081及时沟通
- title %info%
- cd /d "%~dp0"
- set ago=-1
- powershell -NoProfile -ExecutionPolicy bypass "$d=(get-date).adddays(%ago%).toString('yyyy-MM-dd');dir -recurse|?{($_.CreationTime.toString('yyyy-MM-dd') -eq $d) -and ($_ -is [System.IO.FileInfo])}|%%{$_.FullName}"
- :end
- echo;%info%
- pause
- exit
复制代码
作者: allen3371 时间: 2020-3-2 15:02
回复 6# Batcher
我这段代码的用处是用来删除N天前的数据库备份文件,但是保留n-15天内的,每天的最后一个备份文件- @echo off
- ::注意,系统的默认日期格式应该为yyyy/mm/dd 否则会出问题
- ::---------变量设置区-------------
- ::这里注意,一定要打开enabledelayedexpansion,否则取的总是变量的初始值
- setlocal enabledelayedexpansion
- set sd=D:\mssql\backup
- ::设置需要操作的文件的前缀
- set mask="mylogistics_backup_*"
- set searchmask="mylogistics_backup_"
- ::设置N天前的文件每天保留一个最新备份
- set DaysAgo=3
-
- ::---------执行区------------
- cd /d "%sd%"
-
-
- for /l %%z in (%DaysAgo%,1,5) do (
- echo ---------------
- ::获取N天之前的日期
- for /f %%i in ('powershell -c "Get-Date (Get-Date).AddDays(-%%z) -uformat "%%Y/%%m/%%d""') do (
- set "DstDate=%%i"
- )
- echo process date is !DstDate!
- ::获取 第 n 天前最后创建的文件名(仅仅是一天的文件)
- set lastfile=0
- for /f "tokens=1,2,4" %%a in ('dir %mask% /tc ^| find %searchmask%') do (
- set createtime="%%a %%b"
- set latestTime="0"
- if /i !DstDate! EQU %%a ( if /i !createtime! GTR !latestTime! (set latestTime=!createtime! && set lastfile=%%c))
- )
- echo lastfile is !lastfile!
- ::删除第N天前文件,但是保留最后一个最后创建的文件(仅仅是一天的文件)
- for /f "tokens=1,2,4" %%a in ('dir %mask% /tc ^| find %searchmask%') do (
- if /i !DstDate! EQU %%a ( if /i !lastfile! neq %%c ( del %%c ))
-
- )
-
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |