Board logo

标题: 一句话 "全盘"查找指定日期内的指定文件 [打印本页]

作者: plp626     时间: 2008-3-3 19:00    标题: 一句话 "全盘"查找指定日期内的指定文件

下面代码还是有点烦,见6楼简洁代码 PS: 2008-3-6-12:40 plp626

查看根目录树内 2008年3月份 ...  ... 的exe文件
创建的:(查病毒方便了)
cd\&(((dir/a/s/tc/4|sort)|findstr /bc:"2008-03")|findstr /ve \.)|findstr /e \.exe
写入的:(注意日期中间是两个空格)
cd\&(((dir/a/s/tw/4|sort)|findstr /bc:"2008-03-01  20:10")|findstr /ve \.)|findstr /e \.exe
访问的:
cd\&(((dir/a/s/ta/4|sort)|findstr /bc:"2008-03-01")|findstr /ve \.)|findstr /e \.exe
[ Last edited by plp626 on 2008-3-6 at 02:00 PM ]
作者: lxmxn     时间: 2008-3-3 19:07
不错,一行命令就可以搞定了。
作者: zh159     时间: 2008-3-4 11:07
如果是查找特定格式文件,应该可以更简化:
cd\&dir/a/s/tc *.exe|findstr /bc:"2008-03"
既然是查找指定日期内的指定文件,可以不必使用sort排序
作者: plp626     时间: 2008-3-4 20:04    标题: 多谢zh159前辈指教. 现精简如下

查看根目录树内 2008年3月份 ...  ... 的exe文件:
创建的:
cd\&dir/a/s/tc/4 *.exe|sort|findstr /b "2008-03"
写入的注意日期中间是两个空格)
cd\&dir/a/s/tw/4 *.exe|sort|findstr /bc:"2008-03-01  20:10"
访问的:
cd\&dir/a/s/ta/4 *.exe|sort|findstr /b "2008-03-01"
查看c:盘内 2008年3月1日到3月6日访问的exe文件:
dir/a/s/ta/4 c:\*.exe|findstr /b "2008-03-0[1-6]"|sort
查看当天访问的所有文件.
for /f "skip=1" %a in ('wmic logicaldisk where "drivetype=3"') do echo %a------------------&dir/a/ta/s %a\|findstr /b "%date:~,10%"|sort|findstr /ve \.

@echo off
set http=http://www.cn-dos.net/forum/viewthread.php?tid=38096
if "%1"=="/?" goto help
if "%1"=="/c" goto code
if "%1"=="/a" goto all
if "%3"=="" (set t3=%date:~5,5%) else set t3=%3
dir/a/s%1/4 %2|findstr /b "2008-%t3%"|findstr /ve \.|sort
goto :eof
:help
echo -------------------------
echo /c  看源代码
echo /a  全盘的,必须作为第一个参数
echo /ta 访问
echo /tw 修改
echo /tc 创建
echo 例:
echo 查找C盘当天所有 访问的 后缀名exe的文件
echo %~n0 /ta c:\*.exe
echo 查看当天全盘访问的所有文件
echo %~n0 /a /ta *.*(*.*可以省略)
echo 查找当前目录树下2008年3月1号到9号所有 修改的 文件名与*.??匹配的 文件
echo %~n0 /tw *.?? 03-0[1-9]
echo 详细匹配见findstr /r参数.&echo 欢迎修改查询,并来%http%跟帖.
goto :eof
:all
shift
if "%3"=="" (set t3=%date:~5,5%) else set t3=%3
for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=3"') do (
echo %%a------------------
dir/a/s%1/4 %%a\%2|findstr /b "2008-%t3%"|sort|findstr /ve \.
)
goto :eof
:code
more %~f0
ping /n 2 127.0>nul
start/max %http%&goto :eof
PS: 用sort是为了按时间先后顺序排序,不在乎时间顺序可以省略.

[ Last edited by plp626 on 2008-3-6 at 11:41 AM ]
作者: 5872169     时间: 2008-3-6 12:10
写的很好,但是没有指明查到文件的路径!
作者: plp626     时间: 2008-3-6 13:11
你结合for扩展变量试试.
为了代码的简洁没有给出,因为这些都是在命令行下随手输入用的.找到了要查找的文件,用dir/a/s/b *.*来查路径
作者: 5872169     时间: 2008-3-6 13:17
这样太查找太麻烦,能不能搜索完之后能指明路径呢?
作者: plp626     时间: 2008-3-6 13:28

@echo off
for /f "tokens=3*" %%a in ('dir/a/s/ta/4 *.exe^|findstr /b "2008-03-0[1-6]"') do dir/a/s/b "%%b"
pause
现在优化一下:
@echo off
for /f "tokens=3*" %%a in ('dir/a/s/ta/4 *.exe^|findstr /b "2008-03-0[1-6]"') do echo.%%~$PATH:b
pause
[ Last edited by plp626 on 2008-3-7 at 12:26 AM ]
作者: abcd     时间: 2008-3-6 13:57
用wmic是否可以更快??

回plp262兄,我没有批评的意思,我知道自己说错了,所以马上把帖子删除了

见谅见谅
作者: plp626     时间: 2008-3-6 14:03
abcd兄说的是,第一个代码确实太慢,
对wmic我还不怎么了解.刚刚接触,模仿而已.
作者: plp626     时间: 2008-3-6 14:04
不过第二个代码有严重缺陷,含空格路径的给抹掉了
作者: 5872169     时间: 2008-3-6 14:27


  Quote:
Originally posted by plp626 at 2008-3-6 01:28 PM:
@echo off
for /f "tokens=3*" %%a in ('dir/a/s/ta/4 *.exe^|findstr /b "2008-03-0[1-6]"') do dir/a/s/b "%%b"
pause
应abcd兄批评,现在优化一下: ...

第一个代码无法全盘搜索,第二个代码错误
作者: plp626     时间: 2008-3-6 14:42
第一个是默认当前目录下搜索,你放在根目录下试试(全盘是逻辑盘)
若真要整个磁盘搜索,你结合6楼第5个代码改改,或直接用第6个代码的/a参数来做
第二个代码没错,我机子xpsp2