中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一句话 "全盘"查找指定日期内的指定文件
作者:
标题: 一句话 "全盘"查找指定日期内的指定文件 上一主题 | 下一主题
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『楼 主』:  一句话 "全盘"查找指定日期内的指定文件

下面代码还是有点烦,见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 ]

   此帖被 +4 点积分     点击查看详情   
评分人:【 lxmxn 分数: +4  时间:2008-3-3 19:06


2008-3-3 19:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

不错,一行命令就可以搞定了。

2008-3-3 19:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  

如果是查找特定格式文件,应该可以更简化:
cd\&dir/a/s/tc *.exe|findstr /bc:"2008-03"
既然是查找指定日期内的指定文件,可以不必使用sort排序



2008-3-4 11:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 4 楼』:  多谢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 ]

2008-3-4 20:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
5872169
高级用户





积分 959
发帖 474
注册 2007-10-25
状态 离线
『第 5 楼』:  

写的很好,但是没有指明查到文件的路径!

2008-3-6 12:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 6 楼』:  

你结合for扩展变量试试.
为了代码的简洁没有给出,因为这些都是在命令行下随手输入用的.找到了要查找的文件,用dir/a/s/b *.*来查路径



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-3-6 13:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
5872169
高级用户





积分 959
发帖 474
注册 2007-10-25
状态 离线
『第 7 楼』:  

这样太查找太麻烦,能不能搜索完之后能指明路径呢?

2008-3-6 13:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 8 楼』:  


@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 ]



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-3-6 13:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 9 楼』:  

用wmic是否可以更快??

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

见谅见谅

2008-3-6 13:57
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 10 楼』:  

abcd兄说的是,第一个代码确实太慢,
对wmic我还不怎么了解.刚刚接触,模仿而已.



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-3-6 14:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 11 楼』:  

不过第二个代码有严重缺陷,含空格路径的给抹掉了



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-3-6 14:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
5872169
高级用户





积分 959
发帖 474
注册 2007-10-25
状态 离线
『第 12 楼』:  



  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兄批评,现在优化一下: ...

第一个代码无法全盘搜索,第二个代码错误

2008-3-6 14:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 13 楼』:  

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



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-3-6 14:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: