楼 主
[已结]如何让dir查找文件时忽略指定的某个目录?
发表于 2004-06-13 00:00 · 中国 广东 广州 联通
中级用户
★★
积分 378 发帖 88 注册 2004-05-05 00:00 22年会员 UID 23815 性别 男
状态 离线
如何让dir在目录和子目录中查找文件时忽略指定的某个目录?
[
Last edited by HAT on 2008-11-6 at 18:06 ]
www.51ct.net
第 2 楼
发表于 2004-06-13 00:00 · 中国 广东 广州 联通
中级用户
★★
积分 378 发帖 88 注册 2004-05-05 00:00 22年会员 UID 23815 性别 男
状态 离线
怎么刚发就跑到最低下去了,奇怪!
www.51ct.net
第 3 楼
发表于 2004-06-14 00:00 · 中国 山西 太原 中移铁通
元老会员
★★★★
Batchinger
积分 4,432 发帖 1,512 注册 2002-10-18 00:00 23年会员 UID 19 性别 男
状态 离线
Re 死性不改:
内部命令DIR并未提供与此有关的参数,可以用以下方法得到类似的结果:
DIR /A /B /S | FIND "指定目录" /V
注:代码中的"指定目录"需要替换为你所要忽略的目录,最好指明此目录的完整路径。
另外,一些支持排除文件的命令行程序也可以得到相应的文件列表,比如PKZIP。
※ Batchinger 致 Bat Fans:请访问
批处理编程的异类 ,欢迎交流与共享批处理编程心得!
第 4 楼
发表于 2004-06-14 00:00 · 中国 广东 广州 联通
中级用户
★★
积分 378 发帖 88 注册 2004-05-05 00:00 22年会员 UID 23815 性别 男
状态 离线
这样做,还是查找了那个指定目录啊,只是列表出来后用find清除掉而已。
还有更好的方法吗?因为那个指定的目录有上千个文件啊!
www.51ct.net
第 5 楼
发表于 2004-06-14 00:00 · 中国 广东 广州 联通
中级用户
★★
积分 378 发帖 88 注册 2004-05-05 00:00 22年会员 UID 23815 性别 男
状态 离线
//这是我写的批处理,用来从系统中还原dllcache目录的。
@echo off
if exist %systemroot%\fdir.txt goto restore
dir %systemroot%\system32\dllcache /a /b >files.txt
sfc /cachesize=0
sfc /purgecache
cls
echo.
echo.
echo 请等待CMD窗口自动退出,时间可能比较长。
for /f "usebackq" %%I in (files.txt) do echo dir c:\%%I /a /b /s ^>^>%systemroot%\fdir.txt >>fdir.cmd
call fdir.cmd
del fdir.cmd
del files.txt
exit
:restore
set fdir=%systemroot%\fdir.txt
echo.
echo.
echo 正在复制文件
echo 请等待CMD窗口自动退出。
echo.
echo.
for /f "usebackq" %%J in (%fdir%) do if exist %%J attrib -s -h %%J && copy %%J %systemroot%\system32\dllcache\ >nul
del %fdir%
www.51ct.net
第 6 楼
发表于 2004-06-14 00:00 · 中国 广东 广州 联通
中级用户
★★
积分 378 发帖 88 注册 2004-05-05 00:00 22年会员 UID 23815 性别 男
状态 离线
如今我想实现当其它目录找不到dllcache目录中的某个文件时,
保留这个文件在dllcache目录中,而可以找到的则一律删除。
以免restore时,有部分无法从其它目录复制回dllcache目录。
www.51ct.net
第 7 楼
发表于 2004-06-20 00:00 · 中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432 发帖 1,512 注册 2002-10-18 00:00 23年会员 UID 19 性别 男
状态 离线
Re 死性不改:
如果有上千个文件的话,那么不论采用何种算法,代价都是比较大的,所差也只是五十步和一百步的区别。
不过,我可以给你提供一个思路,就是将两次文件遍历互相置换,也就是说,在开始遍历所有子目录(可以排除dllcache中的文件)中的dll文件,并且生成列表。然后在第二次遍历时,只需用 if exist 查知dllcache是否存在此dll文件即可。
此算法将第二次的双重遍历(即在files.txt和C:\的遍历)改为单重遍历,应该会提升一些性能,至于改变算法所涉及到的一些细节,约略难不到死兄吧。
※ Batchinger 致 Bat Fans:请访问
批处理编程的异类 ,欢迎交流与共享批处理编程心得!
第 8 楼
发表于 2008-11-06 14:51 · 中国 上海 电信
初级用户
★★
积分 35 发帖 62 注册 2008-10-12 21:46 17年会员 UID 128197 性别 男
状态 离线
那个 dir | find "路径 " /v
好象没有用 啊!!!
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正