Board logo

标题: [文件操作] [已解决]批处理如何获得一小时前到当前时间之间所创建的文件? [打印本页]

作者: lazygc520    时间: 2009-8-17 14:51     标题: [已解决]批处理如何获得一小时前到当前时间之间所创建的文件?

本帖最后由 pcl_test 于 2016-7-30 22:24 编辑

假设我的文件创建在E:\ 时间为11点,我12点的时候如何获得从11:00-12:00之内创建的文件?

[ 本帖最后由 lazygc520 于 2009-8-24 10:22 编辑 ]
作者: keen    时间: 2009-8-17 21:40

以当前时间为标准,显示一个小时前的文件。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%i in ("%date%") do set dd=%%i
  3. for /f "delims=:" %%i in ("%time%") do set /a tt=%%i-1
  4. for /r e:\ %%i in (*) do (
  5.     for /f "tokens=1,2 delims=: " %%a in ("%%~ti") do (
  6.         if "%%a"=="%dd%" if "%%b"=="%tt%" echo %%i
  7.     )
  8. )
  9. pause
复制代码

作者: Batcher    时间: 2009-8-17 22:54     标题: 回复 2楼 的帖子

时间的计算不是这么简单的问题,可以参考:Ritchie Lawrence 批处理函数库中英文版
http://bbs.bathome.net/thread-3056-1-1.html
作者: keen    时间: 2009-8-18 10:03     标题: 回复 3楼 的帖子

呵呵,的确是,时间的计算太复杂了,没有考虑全面。
话说HAT的翻译Ritchie Lawrence 的批处理库函数,很是强大。
作者: newxso    时间: 2009-8-18 21:19

幸好楼主要求是一小时内而不是几小时几分几秒,所以可以用简单的方式,而不用把时分秒格式转换为秒数来运算时间。
  1. @echo off&setlocal enabledelayedexpansion
  2. set ndy=%date:~0,-4%
  3. set nte=%time:~0,-3%
  4. set nhr=%nte:~0,-6%
  5. set nme=%nte:~3,-3%
  6. set nsd=%nte:~6%
  7. set /a strhr=%nhr%-1
  8. set strTime=%strhr%:%nme%
  9. echo.正在搜索文件,请稍等...
  10. echo.%ndy%  %strTime%--%nte:~0,-3% >t.txt
  11. echo.>>t.txt
  12. for /f "delims=" %%a in ('dir /b/s/a-d e:\') do (
  13.   set t=%%~ta
  14.   set d=!t:~0,-6!
  15.   set t=!t:~-5!
  16.   if !d! equ %ndy% if !t! leq %nte% if !t! geq %strTime% >>t.txt echo.%%a  %%~ta
  17. )
复制代码

[ 本帖最后由 newxso 于 2009-8-18 21:46 编辑 ]
作者: Batcher    时间: 2009-8-18 23:50     标题: 回复 5楼 的帖子

你的时间计算和2楼差不多吧?这个方法是错误的,再仔细想想?
作者: zhouyongjun    时间: 2009-8-19 21:55

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=:" %%i in ('time/t') do set hh=%%i&set mm=%%j
  3. for /f "tokens=1-3 delims=- " %%i in ('date/t') do set year=%%i&set month=%%j&set day=%%k
  4. set/a month=100%month%%%100,day=100%day%%%100,hh=100%hh%%%100,hh-=1
  5. if %hh% equ -1 set/a hh=23&call :datejs
  6. set/a month=10%month%,day=10%day%,hh=10%hh%
  7. set month=%month:~-2%&set day=%day:~-2%&set hh=%hh:~-2%
  8. set "rqsj=%year%-%month%-%day% %hh%:%mm%"
  9. for /f "delims=" %%i in ('dir/b/s/a-d e:\') do if "%%~ti" geq "%rqsj%" echo %%i
  10. pause&exit
  11. :datejs //**日期计算部分,以前写的,拿来凑合用**//
  12. for %%i in (1,5,7,10,12) do (
  13.    if %month% equ %%i (
  14.       if %day% neq 1 (set/a day-=1&goto :eof
  15.          ) else (
  16.            if %month% neq 1 (set/a month-=1,day=30&goto :eof
  17.               ) else (set/a year-=1,month=12,day=31&goto :eof)
  18. )
  19. )
  20. )
  21. for %%i in (2,4,6,8,9,11) do (
  22.    if %month% equ %%i (
  23.       if %day% neq 1 (set/a day-=1&goto :eof
  24.          ) else (set/a month-=1,day=31&goto :eof)
  25. )
  26. )
  27. set/a mod=!(year%%4)^&!(!(year%%100))^|!(year%%400)
  28. if %month% equ 3 (
  29.    if %mod% equ 1 (
  30.      if %day% neq 1 (set/a day-=1&goto :eof
  31.         ) else (set/a month-=1,day=29&goto :eof)
  32. ) else (
  33. if %day% neq 1 (set/a day-=1&goto :eof
  34.         ) else (set/a month-=1,day=28&goto :eof)
  35. )
  36. )
复制代码

作者: zhouyongjun    时间: 2009-8-19 22:06

上面代码日期时间格式
C:\Documents and Settings\Administrator>date /t
2009-08-19 星期三

C:\Documents and Settings\Administrator>time /t
22:05

[ 本帖最后由 zhouyongjun 于 2009-8-19 22:08 编辑 ]
作者: newxso    时间: 2009-8-19 23:40

其实批处理中利用 %%~ti 获取的是最后修改日期,并不是文件的创建日期。对于日期和时间的计算,我觉得最好还是借用VBS比较简单得多:
  1. ' 2>nul&cls&@cscript //nologo //e:vbscript "%~f0" &pause
  2. strNowDate = Now
  3. FilesTree("E:\")
  4. Function FilesTree(sPath)
  5.     Set oFso = CreateObject("Scripting.FileSystemObject")
  6.     Set oFolder = oFso.GetFolder(sPath)
  7.     Set oFiles = oFolder.Files
  8.     For Each oFile In oFiles
  9.         If DateDiff("s",oFile.DateCreated,strNowDate) <= 3600 Then
  10.            Wscript.Echo oFile.Path & "  " &  oFile.DateCreated
  11.         End If
  12.     Next
  13.     Set oSubFolders = oFolder.SubFolders
  14.     For Each oSubFolder In oSubFolders
  15.         FilesTree(oSubFolder.Path)
  16.     Next   
  17.     Set oFolder = Nothing
  18.     Set oSubFolders = Nothing
  19.     Set oFso = Nothing
  20. End Function
复制代码
如果想把结果保存到文本,把第一句改成如下即可:

' 2>nul&cls&@cscript //nologo //e:vbscript "%~f0" >file.txt&exit

[ 本帖最后由 newxso 于 2009-8-19 23:52 编辑 ]
作者: Batcher    时间: 2009-8-20 00:30     标题: 回复 9楼 的帖子

可以用dir命令来获取创建日期
作者: zhouyongjun    时间: 2009-8-20 00:39

呵呵,被我混为一谈了,稍加修改就行了。。。
作者: lazygc520    时间: 2009-8-24 10:03     标题: 回复 4楼 的帖子

HAT就是batcher吧
作者: zhouyongjun    时间: 2009-8-24 20:28     标题: 回复 12楼 的帖子

楼上正解........




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