无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 10612|回复: 51
打印 上一主题 下一主题

[已解决] 请教:关于G4D搜索文件的问题

[复制链接]
跳转到指定楼层
1#
发表于 2011-8-11 21:41:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想搜索硬盘上的.gho后缀的文件,由于功力有限,看C大的现成的QGHO的批处理看的一头雾水。不知有没有G4D的全盘搜索列出指定后缀名文件的简易的命令行或批处理。
请教各位大大如何简单实现(只要搜索两层子目录就满意了)。

[ 本帖最后由 mygamexxx 于 2011-8-12 17:26 编辑 ]
2#
发表于 2011-8-11 22:15:58 | 只看该作者
我明天再把qgho里面搜gho的代码提出来,像硬盘分区列表菜单那样整成一个可以调用的模块。
回复

使用道具 举报

3#
 楼主| 发表于 2011-8-11 22:22:15 | 只看该作者

回复 #2 chenall 的帖子

有劳C大了,最好可以让我能直接抄袭一下,就可以用的。嘻嘻,菜鸟的心思!!
下面的链接是我抄袭C大的作品加工的,能指点一下存在的问题吗?
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=194499&extra=page%3D1

[ 本帖最后由 mygamexxx 于 2011-8-11 22:24 编辑 ]
回复

使用道具 举报

4#
发表于 2011-8-12 13:37:42 | 只看该作者
本模块是一个grub4dos的批处理,
可用于搜索N级目录下的指定类型文件,并显示于菜单上
这是一个通用模块,可以通过参数直接调用或者通过预先设置变量的方法再调用,
使用方法请参考本站另一贴子
[原创] GRUB4DOS 通用模块之分区选择

本模块支持的参数如下
  • m.cmd 指定每个菜单要执行的命令 ( 必须的其它的都是可选参数.)
  • m.title 指定菜单标题
  • m.return 指定返回命令
  • m.menu 指定菜单位置(默认使用(md)0×210+16来存放菜单)
  • m.subdir 指定要查找的目录级数,默认1
  • m.devs 指定要查找的设备(find的参数)
  • m.init 指定菜单的初始化命令
  • m.ext 指定扩展名(用于过滤),多个扩展名用双引号每个扩展名之间用空格分隔
    例: ext=".gho .txt"
以下是使用的效果截图,欢迎反馈BUG或建议.









复制源代码请点这里
http://fayaa.com/code/view/21739/raw/




转载自:chenall's blog

本文链接地址: [原创] GRUB4DOS 通用模块之文件选择模块

[ 本帖最后由 chenall 于 2011-8-12 13:39 编辑 ]
回复

使用道具 举报

5#
发表于 2011-8-12 13:41:10 | 只看该作者

回复 #3 mygamexxx 的帖子

看了一下,没有发现什么问题,不错的想法,准备在下一版本的QGHO中加入处理0备份失败的问题.

在主界面也加入判断.
回复

使用道具 举报

6#
 楼主| 发表于 2011-8-12 17:26:34 | 只看该作者
太棒了,用着很好。
回复

使用道具 举报

7#
发表于 2011-8-15 15:55:46 | 只看该作者

终于实现了梦寐以求的超级搜索!谢谢

该批处理终于实现了我梦寐以求的g4d超级搜索!我已将源码复制另存并命名为SuperFinder。谢谢C大的辛勤工作于我等菜鸟!!
一点小建议:建议支持搜索无扩展名文件,同时此模块能供wee使用。我的想法是这样的:1.硬盘中有很多个grldr(内置菜单可能不同),可以选择启动;2.在BIOS中装入wee后,即使硬盘中不知grldr放哪里了,也能搜索找到并启动之。目前能使用SuperFinder的前提条件是已经启动并进入了一个grldr环境,有时粗心的我们将硬盘mbr改为了g4d引导,但在重装系统或其它操作中竟然将grldr格式化掉了或放在文件夹中了,导致启动时出现“can not find grldr”,只得又进入pe复制一份进去,而通常我们硬盘上的grldr肯定不止一份,只是不在根目录或默认目录下而已!!
再次谢谢C大。
回复

使用道具 举报

8#
发表于 2011-8-15 16:41:16 | 只看该作者
现在的版本对于一般的应用是没有问题.

因为目前GRUB4DOS下没有办法快速确认这是一个文件或目录.

所以会有一些问题,比如有可能把一个带扩展名的目录显示到菜单上.
回复

使用道具 举报

9#
发表于 2011-8-15 16:43:52 | 只看该作者

回复 #7 scxiegangxy 的帖子

要支持无扩展名也行,但是处理的速度会慢一些,因为需要确定这是否一个文件(原因上面已经说过了)
要想支持wee那可没有那么简单.
回复

使用道具 举报

10#
发表于 2011-8-16 09:23:29 | 只看该作者
感谢c大的耐心解答。很多时候,系统的默认引导文件都是一些不带扩展名的文件,如ntldr,peldr,grld和很多pe等,因此支持无扩展名有必要(grldr搜索文件慢总比找不到启动文件好,虽然实际上我们在grldr环境下都知道常用的引导文件的位置和名称,但启动一些专门的引导文件可能位置不容易记住。当然自定义grldr扩展名也很方便,但我十分倾向于不要动系统的默认引导文件,包括更名,这样通用性要好一些)。让wee支持既然暂有难度,那能否辛苦c大满足前述第一愿望。
谢谢c大。grub4dos有你而精彩!!
回复

使用道具 举报

11#
发表于 2011-8-16 13:58:20 | 只看该作者
OK,新的版本已经更新,暂时没有发现问题。

2011-08-16 更新:(新的版本处理的速度会慢一些,但精确度比较高,之前的版本会把带扩展名的目录当成文件显示在菜单上)
  • 添加了一个参数root,指定要从哪个目录开始找.例子:
    root=()/boot
    从只找/BOOT目录下的文件,注:前面的()是必须的,你也可以指定一个磁盘,代表从这个磁盘的这个目录开始查找比如
    root=(hd0,4)/boot
    则先从(hd0,4)/boot目录下查找文件,
    注:如果有带devs参数,必须确保上面的(hd0,4)磁盘有在在devs列表中.
  • 支持查找无扩展名的文件(之前的版本无扩展名的全部被当成一个子目录对待)
  • 新的ext参数只查找无扩展名的文件.如下,会查找无扩展名的文件.
    ext=.
  • 菜单的注释新增了文件大小的提示(因为新的版本使用cat –locate=0来检测是否一个文件,就顺便把这个也利用上了.)
回复

使用道具 举报

12#
发表于 2011-8-16 15:56:50 | 只看该作者

回复 #11 chenall 的帖子

新的版本使用cat –locate=0来检测是否一个文件
===============================
对于ntfs分区的文件夹,这个检测不准确。
=========================================
我的run模块,也是纠结这个问题。期待c大完善。

[ 本帖最后由 zxw 于 2011-8-16 16:06 编辑 ]
回复

使用道具 举报

13#
发表于 2011-8-16 16:24:10 | 只看该作者

回复 #12 zxw 的帖子

这个好像影响不大,0字节我们不考虑,

不管它是文件还是目录都无所谓了.
回复

使用道具 举报

14#
发表于 2011-8-16 17:11:25 | 只看该作者
find %m.devs% call :生成文件列表
这里是否笔误?
回复

使用道具 举报

15#
发表于 2011-8-16 17:54:20 | 只看该作者
菜单中是怎么调用的?
比如批处理文件命名M
是不是这样写
tittle 搜索硬盘上所有gho后缀的文件
M CMD=ECHO EXT=.GHO DEVS="--DEVICES=H"  RETURN=configfile (md)4+8

是不是这样呀?
回复

使用道具 举报

16#
发表于 2011-8-16 19:03:45 | 只看该作者

回复 #14 zxw 的帖子

这个没错,因为偷懒了,直接让devs参数作为FIND的参数。
这样子使用起来就很灵活,比如你可以指定查找存在某个文件的磁盘,例:

devs="--devices=h /boot/grldr"

这样就只有存在/boot/grldr文件的磁盘才会被查找。其实find命令是非常灵活的。

没有指定devs参数时就只会查找当前root下的文件,如果有指定了root,则查找root下的文件。


@tingyue-wu

1.所有的参数都是小写的。
2.return参数后面有带空格需要用用半角的引号否则会传递错误。

其它的自己看例子就知了。

[ 本帖最后由 chenall 于 2011-8-16 19:09 编辑 ]
回复

使用道具 举报

17#
发表于 2011-8-16 19:35:26 | 只看该作者

回复 #16 chenall 的帖子

cmd=后面可以使用多个参数,以及使用&&和||吗?

另外发现title=后面的标题内容不能像默认标题一样居中显示,而是处于左边,

目前只是用这个来灵活搜索文件,为一时记不住文件位置起到提示作用
暂时还想不出有什么更好的应用,主要是我对其它命令不熟悉的原因。
直觉上认为cmd=后面跟的参数将会使这个模块的作用得到很大发挥。
还有用set变量也可以发挥更大作用,如set TT=SEE cmd=echo ext=.gho subdir=2 devs="--devices=h" root=(hd0,0)/ABC return=configfile (md)4+8
只是不知道怎么用。

title  20  搜索文件并列出菜单 \n   利用外置命令SEE查找所有硬盘,并根据输入的条件自动生成菜单
clear
echo >输入待搜索后缀名,(点+后缀),如.gho 注:只输入.表示搜索无后缀文件
echo >搜索多种后缀,用" "并空格隔开,即搜索.ISO和.GHO要输".ISO .GHO"
echo >不需要路径,最好注意大小写,默认(回车)输入.GHO
set name= && set /p name=>input:
if not exist name set name=.GHO && echo Now use .GHO as default.
if not exist name set name=.GHO || echo [已设定搜索%name%后缀文件]
echo
echo >输入待搜索文件所在位置的已知文件名,如FONTS,将只搜索含FONT文件的磁盘
echo >需输入空格+路径,格式[空格]/[PATH]/[file],默认(回车)忽略此项条件
set luyin= && set /p luyin=>input:
if not exist luyin set luyin= && echo Now use 忽略 as default.
if not exist luyin set luyin= || echo [已设定只搜索含有%luyin%文件的分区]
echo
echo >搜索将从XX分区XX文件夹开始。格式(hd0,0)/ABC/BCD
echo >可不输入分区,但()/不能少,表示从当前分区开始搜索(回车默认)
set fenqu= && set /p fenqu=>input:
if not exist fenqu set fenqu=()/ && echo Now use ()/ as default.
if not exist fenqu set fenqu=()/ || echo [已设定从%fenqu%开始搜索]
echo
echo >将搜索几层目录?请输入数字,如输入5,搜索即5层目录
echo >默认(回车)只搜索2层目录,建议甭搜索太深,较慢
set numeral= && set /p numeral=>input:
if not exist numeral set numeral=2 && echo Now use 2 as default.
if not exist numeral set numeral=2 || echo [已设定搜索%numeral%层目录]
command SEE cmd=echo ext=%name% subdir=%numeral% devs="--devices=h%luyin%" root=%fenqu% title=列出%name%文件菜单 return="configfile (md)4+8"

[ 本帖最后由 tingyue-wu 于 2011-8-17 08:08 编辑 ]
回复

使用道具 举报

18#
发表于 2011-8-17 08:35:15 | 只看该作者

回复 #16 chenall 的帖子

让devs参数作为FIND的参数,这个我知道没错。
  1. find %m.devs% call :生成文件列表
复制代码
我是指:find %m.devs% 与 call :生成文件列表这样组合会出错。
当然,你写成:
  1. find %m.devs% call :生成文件列表 || echo Unknow Error.
复制代码
"call :生成文件列表"这一句并没有真正执行。
m.devs的值默认为--set-root时,下面简单还原出错:



[ 本帖最后由 zxw 于 2011-8-17 08:43 编辑 ]
回复

使用道具 举报

19#
发表于 2011-8-17 09:06:23 | 只看该作者

回复 #17 tingyue-wu 的帖子

1.关于标题居中的问题.
以后再改进...

2.CMD的参数,目前只是简单的把文件路径作为参数附加在指定的CMD后面.应付一般的应用,
如果你的应用比较复杂,可以考虑用批处理来取得这个参数.
以后也许会改进,可以指定参数的位置,这样会灵活.一些.
回复

使用道具 举报

20#
发表于 2011-8-17 09:12:27 | 只看该作者

回复 #18 zxw 的帖子

这个没有错,这一句调用 :生成文件列表 时不需要任何参数,默认当前root

使用find时会自动设定root为当前find的磁盘.

你上面的错误其实并不是find命令的错,而是你写错了命令
if "%1"="" exit
当然了这个例子"%1"永远都是空的.所以后面的命令不会被执行.
回复

使用道具 举报

21#
 楼主| 发表于 2011-8-17 09:38:39 | 只看该作者
查找无扩展名的文件,比如当前根下查找文件名为ABC的文件,应如何设定参数?
回复

使用道具 举报

22#
发表于 2011-8-17 09:43:32 | 只看该作者

回复 #21 mygamexxx 的帖子

???
是要查有包括abc文件的磁盘还是只要ABC文件.

如果是只要ABC文件,目前没有办法.
回复

使用道具 举报

23#
发表于 2011-8-17 10:15:25 | 只看该作者

回复 #21 mygamexxx 的帖子

直接查找某文件是无效的,abc也好,abc.d也好,只能查找.+后缀名
回复

使用道具 举报

24#
 楼主| 发表于 2011-8-17 15:21:16 | 只看该作者
我所说的是文件名中包含ABC的无扩展名文件,那就是目前无法实现,明白了。谢谢!!!相当于用通配符查找文件名中包含ABC的无扩展名文件的位置。
因为11楼的第3点:新的ext参数只查找无扩展名的文件.如下,会查找无扩展名的文件.
让我的理解产生问题,以为可以对无扩展名的指定文件名进行。应该是理解为会查找所有无扩展名的任意名称的文件,无法指定文件名。

[ 本帖最后由 mygamexxx 于 2011-8-17 15:27 编辑 ]
回复

使用道具 举报

25#
发表于 2011-8-17 19:10:45 | 只看该作者

回复 #22 chenall 的帖子

又发现一个bug

我查找无扩展名文件,查到63个

然后发现上下方向键只能在1-62个菜单间切换 第63个无法选中,用左右方向键才能选中

另外设定的返回命令菜单也不显示了。

估计有两个可能1、保存菜单的内存不够导致显示不全 2、批处理问题,超出一屏或两屏就会不显示返回菜单
回复

使用道具 举报

26#
发表于 2011-8-21 08:25:05 | 只看该作者
自动生成的菜单默认情况下只有16个扇区的空间,8KB.
超过的就被截断了.
解决办法,如果你的菜单数量比较多,可以自定义菜单.加上参数
menu=菜单文件的位置.

比如
menu=(fd0)/file.lst

注:菜单文件必须是已经存在的,并且有足够的空间,已经被初始化.因为是直接使用>>写入菜单的.

如果你想直接使用内存地址也可以类似这样(就有10KB了)
echo > (md)0x200+20
再指定menu=(md)0x200+20
回复

使用道具 举报

27#
发表于 2011-8-21 10:23:59 | 只看该作者

回复 #26 chenall 的帖子

我直接修改批处理也可以吧
set m.menu=(md)0x210+16 && echo -e default 1\ndebug off > (md)0x210+16

set m.menu=(md)0x200+20 && echo -e default 1\ndebug off > (md)0x200+20

已改 可以

只是和我前面的一个写入内存的菜单(md)0x200+16混淆了。又改了回来,呵

[ 本帖最后由 tingyue-wu 于 2011-8-21 10:35 编辑 ]
回复

使用道具 举报

28#
发表于 2011-8-21 11:09:25 | 只看该作者
直接改批处理当然也可以了,但是使用参数的更灵活.

你可以在你的菜单前面加上一些东西,再调用,这样最终的菜单就会有你想要的东西.

下午有时间的话会更新完善一下.
回复

使用道具 举报

29#
发表于 2011-8-21 12:28:29 | 只看该作者
再次更新了一下.如果没有什么问题,代码将不再变动.

新的版本cmd参数变化比较大,需要注意.



2011-08-21 (变化比较大,请注意看更新说明,新的版本使用起来更加灵活.)
  • 菜单标题自动居中显示
  • cmd的语法改变
    旧的版本cmd=echo要改成如下.
    cmd="echo %1"
    在批处理中调用需要使用%%1
    即,需要多一个%1的参数,这个参数用于接收文件参数.可以放在cmd参数的任意位置.
    并且支持类拟%~dpnx1的格式.
  • 新增filpre参数,指定文件名前辍.
    注意:使用该参数时,subdir参数将不起作用,为了不影响其它情况下的检测速度,该参数只支持单级目录.
[原创] GRUB4DOS 通用模块之文件选择模块[2011-08-21 更新]
回复

使用道具 举报

30#
发表于 2011-8-21 20:51:55 | 只看该作者

回复 #29 chenall 的帖子

filpre参数 和ext一样支持 多种前缀吗?用""和空格来表示?

这个前缀是点(.)前面的完整前缀,还是只要前缀中包含的一个符号或者首个符号就行?(经测试 原来就是首个字符)

经测试 换了新的批处理文件,什么文件也搜不到(有前缀参数但是不输入内容,即忽略),也不显示返回菜单,设置的标题也没有(还是显示默认的)

如果只输入前缀,忽略后缀,结果同上

如果输入前缀w  后缀.iso  只能找到分区根目录上的一个wuyou.iso  但是二级目录的wxrs.iso就找不到了。

[ 本帖最后由 tingyue-wu 于 2011-8-21 21:37 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-23 13:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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