找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34461|回复: 12

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

[复制链接]
发表于 2009-8-17 14:51:18 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-30 22:24 编辑

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

[ 本帖最后由 lazygc520 于 2009-8-24 10:22 编辑 ]

评分

参与人数 1PB +2 收起 理由
pusofalse + 2 感谢主动给标题标注【已解决】字样。

查看全部评分

发表于 2009-8-17 21:40:49 | 显示全部楼层
以当前时间为标准,显示一个小时前的文件。
  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
复制代码
发表于 2009-8-17 22:54:07 | 显示全部楼层

回复 2楼 的帖子

时间的计算不是这么简单的问题,可以参考:Ritchie Lawrence 批处理函数库中英文版
http://bbs.bathome.net/thread-3056-1-1.html
发表于 2009-8-18 10:03:52 | 显示全部楼层

回复 3楼 的帖子

呵呵,的确是,时间的计算太复杂了,没有考虑全面。
话说HAT的翻译Ritchie Lawrence 的批处理库函数,很是强大。
发表于 2009-8-18 21:19:26 | 显示全部楼层
幸好楼主要求是一小时内而不是几小时几分几秒,所以可以用简单的方式,而不用把时分秒格式转换为秒数来运算时间。
  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 编辑 ]
发表于 2009-8-18 23:50:06 | 显示全部楼层

回复 5楼 的帖子

你的时间计算和2楼差不多吧?这个方法是错误的,再仔细想想?
发表于 2009-8-19 21:55:12 | 显示全部楼层
  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. )
复制代码

评分

参与人数 1PB +6 技术 +1 +1 收起 理由
lazygc520 + 6 + 1 + 1 不错!

查看全部评分

发表于 2009-8-19 22:06:30 | 显示全部楼层
上面代码日期时间格式
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 编辑 ]
发表于 2009-8-19 23:40:06 | 显示全部楼层
其实批处理中利用 %%~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 编辑 ]
发表于 2009-8-20 00:30:45 | 显示全部楼层

回复 9楼 的帖子

可以用dir命令来获取创建日期
发表于 2009-8-20 00:39:16 | 显示全部楼层
呵呵,被我混为一谈了,稍加修改就行了。。。
 楼主| 发表于 2009-8-24 10:03:42 | 显示全部楼层

回复 4楼 的帖子

HAT就是batcher吧
发表于 2009-8-24 20:28:22 | 显示全部楼层

回复 12楼 的帖子

楼上正解........
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 17:30 , Processed in 0.032275 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表