标题: [文件操作] [已解决]批处理如何获得一小时前到当前时间之间所创建的文件? [打印本页]
作者: 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
以当前时间为标准,显示一个小时前的文件。- @echo off&setlocal enabledelayedexpansion
- for /f %%i in ("%date%") do set dd=%%i
- for /f "delims=:" %%i in ("%time%") do set /a tt=%%i-1
- for /r e:\ %%i in (*) do (
- for /f "tokens=1,2 delims=: " %%a in ("%%~ti") do (
- if "%%a"=="%dd%" if "%%b"=="%tt%" echo %%i
- )
- )
- 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
幸好楼主要求是一小时内而不是几小时几分几秒,所以可以用简单的方式,而不用把时分秒格式转换为秒数来运算时间。- @echo off&setlocal enabledelayedexpansion
- set ndy=%date:~0,-4%
- set nte=%time:~0,-3%
- set nhr=%nte:~0,-6%
- set nme=%nte:~3,-3%
- set nsd=%nte:~6%
- set /a strhr=%nhr%-1
- set strTime=%strhr%:%nme%
-
- echo.正在搜索文件,请稍等...
- echo.%ndy% %strTime%--%nte:~0,-3% >t.txt
- echo.>>t.txt
- for /f "delims=" %%a in ('dir /b/s/a-d e:\') do (
- set t=%%~ta
- set d=!t:~0,-6!
- set t=!t:~-5!
- if !d! equ %ndy% if !t! leq %nte% if !t! geq %strTime% >>t.txt echo.%%a %%~ta
- )
复制代码
[ 本帖最后由 newxso 于 2009-8-18 21:46 编辑 ]
作者: Batcher 时间: 2009-8-18 23:50 标题: 回复 5楼 的帖子
你的时间计算和2楼差不多吧?这个方法是错误的,再仔细想想?
作者: zhouyongjun 时间: 2009-8-19 21:55
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=:" %%i in ('time/t') do set hh=%%i&set mm=%%j
- for /f "tokens=1-3 delims=- " %%i in ('date/t') do set year=%%i&set month=%%j&set day=%%k
- set/a month=100%month%%%100,day=100%day%%%100,hh=100%hh%%%100,hh-=1
- if %hh% equ -1 set/a hh=23&call :datejs
- set/a month=10%month%,day=10%day%,hh=10%hh%
- set month=%month:~-2%&set day=%day:~-2%&set hh=%hh:~-2%
- set "rqsj=%year%-%month%-%day% %hh%:%mm%"
- for /f "delims=" %%i in ('dir/b/s/a-d e:\') do if "%%~ti" geq "%rqsj%" echo %%i
- pause&exit
- :datejs //**日期计算部分,以前写的,拿来凑合用**//
- for %%i in (1,5,7,10,12) do (
- if %month% equ %%i (
- if %day% neq 1 (set/a day-=1&goto :eof
- ) else (
- if %month% neq 1 (set/a month-=1,day=30&goto :eof
- ) else (set/a year-=1,month=12,day=31&goto :eof)
- )
- )
- )
- for %%i in (2,4,6,8,9,11) do (
- if %month% equ %%i (
- if %day% neq 1 (set/a day-=1&goto :eof
- ) else (set/a month-=1,day=31&goto :eof)
- )
- )
- set/a mod=!(year%%4)^&!(!(year%%100))^|!(year%%400)
- if %month% equ 3 (
- if %mod% equ 1 (
- if %day% neq 1 (set/a day-=1&goto :eof
- ) else (set/a month-=1,day=29&goto :eof)
- ) else (
- if %day% neq 1 (set/a day-=1&goto :eof
- ) else (set/a month-=1,day=28&goto :eof)
- )
- )
复制代码
作者: 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比较简单得多:
- ' 2>nul&cls&@cscript //nologo //e:vbscript "%~f0" &pause
- strNowDate = Now
- FilesTree("E:\")
- Function FilesTree(sPath)
- Set oFso = CreateObject("Scripting.FileSystemObject")
- Set oFolder = oFso.GetFolder(sPath)
- Set oFiles = oFolder.Files
- For Each oFile In oFiles
- If DateDiff("s",oFile.DateCreated,strNowDate) <= 3600 Then
- Wscript.Echo oFile.Path & " " & oFile.DateCreated
- End If
- Next
- Set oSubFolders = oFolder.SubFolders
- For Each oSubFolder In oSubFolders
- FilesTree(oSubFolder.Path)
- Next
- Set oFolder = Nothing
- Set oSubFolders = Nothing
- Set oFso = Nothing
- 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 |