无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 12504|回复: 37
打印 上一主题 下一主题

omnifs引擎,列出所有分区根目录、一级、二级子目录中特定文件

[复制链接]
跳转到指定楼层
1#
发表于 2011-9-29 14:30:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
omnifs引擎,列出所有分区根目录和一级二级子目录中特定文件,需要类似功能的兄弟可以拿去自行 修剪。
omnifs 引擎,就是要支持ntfs分区的文件搜索。

用法" dp0 文件类型扩展名 "
如果省略扩展名参数,将默认 gho 。
脚本可以同时附带多个扩展名参数来同时搜索多个类型的文件。比如:dp0 gho ghs txt log ini  表示搜索整个硬盘序列中的全部硬盘分区的根目录和一级子目录中的gho/ghs/txt/log/ini 五种类型的文件。
最后将结果传递给 list.txt 通过 wbat 建立窗口供用户选择。并将用户选择的文件复制给环境变量 file

做到根目录和一级子目录搜索已经很费力气了,omnifs 运行一次都要耗费时间。

script.7z (1.09 KB, 下载次数: 265)   核心脚本 一个bat和一个awk  
tools.7z (39.37 KB, 下载次数: 233) 所需辅助工具 awk /wbat等
另外需要 omnifs 11 ,体积 比较大,大家自己找吧。

2011.09.29-17:00 再次更新。
1、搜索范围扩展到二级子目录
2、针对文件和文件名中有空格的情况进行了修正
3、针对文件路径过长wbat的list 指令无法显示等问题进行了修正

[ 本帖最后由 dos时代菜鸟 于 2011-9-29 17:49 编辑 ]
2#
 楼主| 发表于 2011-9-29 14:36:22 | 只看该作者
脚本共调用了三次 omnifs 就实现了全硬盘一级子目录搜索。
1 获取硬盘分区资料信息,并生成omnifs调用脚本用于dir各分区根目录
2 调用上一步生成的脚本 dir 各分区根目录,获取文件和文件夹列表,并生成omnifs调用的脚本用于dir 各分区根目录下一级子目录
3 调用上一步生成的脚本 dir 各分区一级子目录,并获得相应的文件和文件夹列表

最后通过 awk 整理 两次获得的文件列表找出 我们要找的文件。

因为脚本用到了中文显示,所以还需要运行汉字系统 比如天汇,ucdos 等。

[ 本帖最后由 dos时代菜鸟 于 2011-9-29 14:50 编辑 ]
回复

使用道具 举报

3#
发表于 2011-9-29 15:55:46 | 只看该作者
能搜索ntfs分区下各级中文目录吗?
回复

使用道具 举报

4#
发表于 2011-9-29 16:05:23 | 只看该作者
这个得强顶`````
回复

使用道具 举报

5#
发表于 2011-9-29 16:35:56 | 只看该作者
这个软件值得收藏备用的,谢谢楼主了。
回复

使用道具 举报

6#
 楼主| 发表于 2011-9-29 17:32:30 | 只看该作者
原帖由 2010yg 于 2011-9-29 15:55 发表
能搜索ntfs分区下各级中文目录吗?


目前更新修正后的脚本可支持2级目录深度。在实机测试用 "我的dos工具箱"做软件环境,可以准确发现ntfs分区的中文目录中的各类文件。

本来想做一个 omnifs 核心的磁盘文件浏览脚本,但是 omnifs 这东西太蹩脚,而且运行一次都要费好长时间。最后只好作出这么个东西来。

我这里只有一个20G硬盘的老笔记本作测试,不知道针对大硬盘会怎么样。

[ 本帖最后由 dos时代菜鸟 于 2011-9-29 17:52 编辑 ]
回复

使用道具 举报

7#
发表于 2011-9-29 17:51:46 | 只看该作者
原帖由 dos时代菜鸟 于 2011-9-29 17:32 发表


目前更新修正后的脚本可支持2级目录深度。在实机测试,可以准确发现ntfs分区的中文目录中的各类文件。

本来想做一个 omnifs 核心的磁盘文件浏览脚本,但是 omnifs 这东西太蹩脚,而且运行一次都要费好长 ...

我在dos工具箱中,也是用omnifs搜索,缺点:不支持ntfs中文搜索且很慢!!!
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=195576&extra=page%3D4
回复

使用道具 举报

8#
 楼主| 发表于 2011-9-29 18:01:29 | 只看该作者
原帖由 2010yg 于 2011-9-29 17:51 发表

我在dos工具箱中,也是用omnifs搜索,缺点:不支持ntfs中文搜索且很慢!!!
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=195576&extra=page%3D4


我用的omnifs 是11.5.1.2266
汉字系统应该没多大关系,我用 ucdos
config 中设置了代码页 COUNTRY=086,936,a:\DOS_BOOT\COUNTRY.SYS 这个有时候很有用。
回复

使用道具 举报

9#
发表于 2011-9-30 06:12:18 | 只看该作者
原帖由 dos时代菜鸟 于 2011-9-29 18:01 发表


我用的omnifs 是11.5.1.2266
汉字系统应该没多大关系,我用 ucdos
config 中设置了代码页 COUNTRY=086,936,a:\DOS_BOOT\COUNTRY.SYS 这个有时候很有用。

我也试用过ucdos,虽然比tw好一点,但,也仅支持显示一级中文目录.所以放弃了!
回复

使用道具 举报

10#
 楼主| 发表于 2011-9-30 11:24:14 | 只看该作者
对于 omnifs 来说分区是fat 还是 ntfs 因该都用一个内核进行处理。
如果 fat 分区能支持的 ntfs 分区一样也应该支持。

我以前用 ghost  就发现不支持中文,后来在 config.sys 中通过 country.sys 设置了代码页,就可以了。虽然中文文件夹是乱码,但总算看上去是规整的方格码,说明确实有效。

1#脚本,就是在我的dos工具箱 环境下测试的,没有问题。
回复

使用道具 举报

11#
发表于 2011-9-30 18:57:40 | 只看该作者
有办法借助omnifs 来格式化EISA分区吗?
回复

使用道具 举报

12#
 楼主| 发表于 2011-9-30 20:40:29 | 只看该作者

回复 #11 Plantsoot 的帖子

要是 omnifs 能够格式化 的话 ,ghost 就不会出gdisk 了。
我以前写过一个 用 gdisk 格式化fat32 和 ntfs 格式分区的脚本,已经改进并收入 “我的dos工具箱” 中
回复

使用道具 举报

13#
发表于 2011-10-2 02:40:19 | 只看该作者
原帖由 dos时代菜鸟 于 2011-9-30 20:40 发表
要是 omnifs 能够格式化 的话 ,ghost 就不会出gdisk 了。
我以前写过一个 用 gdisk 格式化fat32 和 ntfs 格式分区的脚本,已经改进并收入 “我的dos工具箱” 中


恩,我去学习下,多谢了。
回复

使用道具 举报

14#
发表于 2011-10-2 10:52:51 | 只看该作者
好东西,感谢楼主分享
回复

使用道具 举报

15#
发表于 2011-10-16 13:20:18 | 只看该作者
不错!!!
对了,支持对【多硬盘】操作吗?

我想我明白了,使用/info 列出来保存到文件.txt 再去搜索!

[ 本帖最后由 bbsphixy 于 2011-10-16 13:26 编辑 ]
回复

使用道具 举报

16#
 楼主| 发表于 2011-10-16 14:18:50 | 只看该作者

回复 #15 bbsphixy 的帖子

当然支持多硬盘。
这里你必须明白 omnifs /script 的用法。还有 awk 的功能和用法。
回复

使用道具 举报

17#
发表于 2011-10-16 19:24:05 | 只看该作者
嗯,你的方法不错!学习了。
我变化了下:



还有个问题:
如何将 1.1:   1.2:  ... 变成1:1   1:2  ...
实现ghost中的 src=1:1,dst=1:2\moot\xp.gho ...

[ 本帖最后由 bbsphixy 于 2011-10-16 19:49 编辑 ]
回复

使用道具 举报

18#
 楼主| 发表于 2011-10-16 19:48:35 | 只看该作者

回复 #17 bbsphixy 的帖子

看来你还没有理解 omnifs 脚本的意思,而且也没有熟悉 omnifs 命令的特点。
首先 dp1.omn 中不用 再写 "omnifs" 只需要 写入omnifs 的命令,因为dp1.omn 中的命令只能由omnifs调用, 比如: dir 1.1:\moot\sy
其次 dp1.omn 中既然都是 omnifs 的命令, 那么 if ...和 > 之类的 dos命令是无效的,
最后,omnifs 的 dir 命令只能罗列文件夹的内容。

omnifs 的脚本调用 方法也需要明白。

不要着急,告诉你了,必须研究 awk 和 omnifs 的脚本,必须一步一步研究。要想一下子断章取义的摘抄肯定是不行的。

你先做下面的两个操作:
1、编辑 dp1.omn 的内容如下:
  dir 1.1:\moot\sy
  dir 1.2:\moot\sy
  dir 2.1:\moot\sy
  dir 2.2:\moot\sy
2、运行下面的命令:看看效果
  omnifs script dp1.omn
然后你就明白了。
其实结果是很乱的,需要用 awk 这类文本流软件对结果进行整理的。


关于把 1.2: 变成 1:2 这类的操作,用 awk 可以做到,用 xset /change 也可以做到。

[ 本帖最后由 dos时代菜鸟 于 2011-10-16 19:59 编辑 ]
回复

使用道具 举报

19#
发表于 2011-10-16 19:55:01 | 只看该作者
偶!了解!dp1.omn 是omnifs执行脚本...
omnifs调用脚本,等于将多行omnifs命令顺序调用!

我也刚想到了!
omnifs dir moot\sy 罗列里面的文件,然后再作判断之类的...
看来还得再看看AWK

[ 本帖最后由 bbsphixy 于 2011-10-16 20:00 编辑 ]
回复

使用道具 举报

20#
发表于 2011-10-16 20:29:01 | 只看该作者
我想到了,何不把它dp1.omn 变成dp1.bat呢!!!

这样上面 图片上的不就可以使用if..之类的判断了!

可免使用omnifs script语句

效果相同!

接下来就是如何使1.1变1:1


[ 本帖最后由 bbsphixy 于 2011-10-16 20:38 编辑 ]
回复

使用道具 举报

21#
 楼主| 发表于 2011-10-16 21:09:50 | 只看该作者

回复 #20 bbsphixy 的帖子

不行,时间上会慢很多,虽然结果一样,但,bat 中 omnifs 每运行一个命令都会重新把 omnifs 调入内存重新装载内置驱动,很费时间,而要是用 omnifs script 调用脚本,只需要一次装载,就能执行多条命令。这也是为什么 omnifs 提供脚本功能的原因。
回复

使用道具 举报

22#
发表于 2011-10-16 21:15:23 | 只看该作者
原帖由 dos时代菜鸟 于 2011-10-16 21:09 发表


欧!原来如此!多谢。。..

[ 本帖最后由 bbsphixy 于 2011-10-17 00:11 编辑 ]
回复

使用道具 举报

23#
发表于 2011-10-16 22:02:38 | 只看该作者
有一个缺点!使用omnifs脚本执行dir的话,会出错!
dir 1.1:\moot
dir 2.1:\moot
当第一条命令查找不到moot(不存在此目录时)就失败!就不能继续执行下一条命令...
请注意此问题!!!
看来还是得使用BAT的方式执行。

另一个问题:
1.1 变成 1:1  
我采用awk的字符串截取substr函数 来完成替换!!!!!

在此感谢你的help/支持!

[ 本帖最后由 bbsphixy 于 2011-10-17 00:16 编辑 ]
回复

使用道具 举报

24#
 楼主| 发表于 2011-10-17 08:22:48 | 只看该作者

回复 #23 bbsphixy 的帖子

你可以 先编辑omnifs 脚本1 如下内容:
dir 1.1:\
dir 1.2:\
dir 2.2:\
dir 2.1:\
再通过 omnifs调用上面的脚本1,并用 awk 分析运行结果,找出包含 moot 目录的分区,并由awk 生成 dir 该分区 moot 的omnifs 脚本2。 这里需要考虑有多个分区包含mooot目录。再通过  omnifs 调用 脚本2,以此类推,直至目标。

同样道理,脚本1 也可以通过 awk 分析 omnifs info 的运行结果而生成。这才能实现完全自动化,及算下来,运行三次 omnifs 就可以了,不然每个分区都要运行一次 omnifs 会很耽误时间,如果目标计算机有2个硬盘每个硬盘有5个分区,那你就要运行10次omnifs !再加上 omnifs info 这一次,时间上简直就是煎熬。

[ 本帖最后由 dos时代菜鸟 于 2011-10-17 08:34 编辑 ]
回复

使用道具 举报

25#
发表于 2011-10-17 12:37:39 | 只看该作者
虽说如此,我在考虑,当磁盘中有未格式化的分区时,(会不会考虑太多了)
omnifs也会罗列出来,
当omnifs dir 时,出错停止执行下条语句。
回复

使用道具 举报

26#
 楼主| 发表于 2011-10-17 15:25:58 | 只看该作者

回复 #25 bbsphixy 的帖子

这确实是个问题,情况较少见,但要是遇到硬盘有问题的情况,同样会出现问题。

另编辑一个 omn0.bat 用于搜索所有硬盘分区 根下指定目录下的特定类型文件。
用法:
omn0.bat "windows\system32" dll
表示搜索所有硬盘分区根下的 windows\system32 文件夹中的dll文件。

文件夹层数决定了调用 omnifs 的次数。

[ 本帖最后由 dos时代菜鸟 于 2011-10-17 22:29 编辑 ]

OMN0.7z

1.03 KB, 下载次数: 50, 下载积分: 无忧币 -2

回复

使用道具 举报

27#
发表于 2011-10-20 19:32:55 | 只看该作者
dos时代菜鸟大大,貌似搜索出来的镜像源后面少了":1",像这样:"1.3:\sysbak\sysbak.gho",导致ghost恢复时会报错。我手工改成"1.3:\sysbak\sysbak.gho:1"能正常恢复。

请教大大,这个问题怎么解决呀?
回复

使用道具 举报

28#
发表于 2011-10-20 20:45:55 | 只看该作者
原帖由 2011pzn 于 2011-10-20 19:32 发表
dos时代菜鸟大大,貌似搜索出来的镜像源后面少了":1",像这样:"1.3:\sysbak\sysbak.gho",导致ghost恢复时会报错。我手工改成"1.3:\sysbak\sysbak.gho:1"能正常恢复。

请教大大,这个问题怎么解决呀?

楼上的兄弟,这个批处理怎么用呢?能不能指教一下?
回复

使用道具 举报

29#
 楼主| 发表于 2011-10-20 23:03:36 | 只看该作者
原帖由 2011pzn 于 2011-10-20 19:32 发表
dos时代菜鸟大大,貌似搜索出来的镜像源后面少了":1",像这样:"1.3:\sysbak\sysbak.gho",导致ghost恢复时会报错。我手工改成"1.3:\sysbak\sysbak.gho:1"能正常恢复。

请教大大,这个问题怎么解决呀?


dp0.bat 第46行 代码:
awk '{if (FNR==(%?%+1)) {printf "set file=";printf "%%c",34;printf $0;printf "%%c",34;print ""}}' list.txt >file.bat
改为:
awk '{if (FNR==(%?%+1)) {printf "set file=";printf "%%c",34;printf $0":1";printf "%%c",34;print ""}}' list.txt >file.bat

看看
回复

使用道具 举报

30#
发表于 2011-10-21 08:05:47 | 只看该作者
原帖由 dos时代菜鸟 于 2011-10-20 23:03 发表


dp0.bat 第46行 代码:
awk '{if (FNR==(%?%+1)) {printf "set file=";printf "%%c",34;printf $0;printf "%%c",34;print ""}}' list.txt >file.bat
改为:
awk '{if (FNR==(%?%+1)) {printf "set file= ...


谢谢大大指点,成功!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-6-2 23:14

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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