Board logo

标题: [日期时间] 批处理如何获取昨日或者前日创建的文件? [打印本页]

作者: 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

  1. @echo off & setlocal enabledelayedexpansion &rem by author Gan
  2. ::必须需要设置系统时间格式为:2020/02/02
  3. ::设置天数
  4. set /a nd=1
  5. ::设置路径
  6. set "f_path=D:\"
  7. ::Begin
  8. call :runnian %date:~0,4%
  9. call :test
  10. if !m! lss 10 set m=0!m!
  11. if !d! lss 10 set d=0!d!
  12. set "limit=!y!/!m!/!d!"
  13. echo 指定日期为:%limit%
  14. for /r "%f_path%" %%a in (*) do (set "file_t=%%~ta"
  15. set "file_t=!file_t:~0,10!
  16. if "%limit%" equ "!file_t!" echo %%~dpnxta
  17. )
  18. echo Done^^!
  19. pause&exit /b 0
  20. :test
  21. for /f "tokens=1-3 delims=/ " %%a in ("%date%") do (set /a y=%%a, m=1%%b%%100, d=1%%c%%100)
  22. if !nd! lss %d% (set /a d-=nd & goto :eof)
  23. set /a nd-=d, m-=1
  24. :loop
  25.   for /l %%a in (1,1,2) do (
  26.   if !m! LEQ 0 (set /a m=12, y-=1 & call :runnian !y!)
  27.   set /a md = m!m!
  28.   if !nd! lss !md! (set /a d=md-nd & goto :eof)
  29.   set /a nd-=md, m-=1
  30.   goto :loop)
  31. :runnian
  32. 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
  33. set /a n=0
  34. set /a a=%1%%4,a1=%1%%100,a2=%1%%400
  35. if !a! equ 0 set n=1& if !a1! equ 0 set n=0
  36. if !a2! equ 0 set n=1
  37. if !n! equ 1 (set /a m2=29) else (set /a m2=28)
  38. goto :eof
复制代码

作者: Batcher    时间: 2020-3-2 12:56

回复 4# allen3371


    能否把你的代码发出分享一下?
作者: zaqmlp    时间: 2020-3-2 15:01

  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢打赏
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. cd /d "%~dp0"
  6. set ago=-1
  7. 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}"
  8. :end
  9. echo;%info%
  10. pause
  11. exit
复制代码

作者: allen3371    时间: 2020-3-2 15:02

回复 6# Batcher


    我这段代码的用处是用来删除N天前的数据库备份文件,但是保留n-15天内的,每天的最后一个备份文件
  1. @echo off
  2. ::注意,系统的默认日期格式应该为yyyy/mm/dd 否则会出问题
  3. ::---------变量设置区-------------
  4. ::这里注意,一定要打开enabledelayedexpansion,否则取的总是变量的初始值
  5. setlocal enabledelayedexpansion
  6. set sd=D:\mssql\backup
  7. ::设置需要操作的文件的前缀
  8. set mask="mylogistics_backup_*"
  9. set searchmask="mylogistics_backup_"
  10. ::设置N天前的文件每天保留一个最新备份
  11. set DaysAgo=3
  12. ::---------执行区------------
  13. cd /d "%sd%"
  14. for /l %%z in (%DaysAgo%,1,5) do (
  15.             echo ---------------
  16.             ::获取N天之前的日期
  17.             for /f %%i in ('powershell -c "Get-Date (Get-Date).AddDays(-%%z) -uformat "%%Y/%%m/%%d""') do (
  18.                 set "DstDate=%%i"
  19.             )
  20.             echo process date is !DstDate!
  21.             ::获取 第 n 天前最后创建的文件名(仅仅是一天的文件)
  22.             set lastfile=0
  23.             for /f "tokens=1,2,4" %%a in ('dir %mask% /tc ^| find %searchmask%') do (
  24.                 set createtime="%%a %%b"
  25.                 set latestTime="0"
  26.                 if /i !DstDate! EQU %%a ( if /i !createtime! GTR !latestTime! (set latestTime=!createtime! && set lastfile=%%c))
  27. )
  28.            echo lastfile is !lastfile!
  29.            ::删除第N天前文件,但是保留最后一个最后创建的文件(仅仅是一天的文件)
  30.            for /f "tokens=1,2,4" %%a in ('dir %mask% /tc ^| find %searchmask%') do (
  31.            if /i !DstDate! EQU %%a ( if /i !lastfile! neq %%c ( del %%c ))
  32.            
  33.            )
  34. )
  35. pause
复制代码





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