无忧启动论坛

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

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

[复制链接]
1#
发表于 2011-8-11 22:15:58 | 显示全部楼层
我明天再把qgho里面搜gho的代码提出来,像硬盘分区列表菜单那样整成一个可以调用的模块。
回复

使用道具 举报

2#
发表于 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 编辑 ]
回复

使用道具 举报

3#
发表于 2011-8-12 13:41:10 | 显示全部楼层

回复 #3 mygamexxx 的帖子

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

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

使用道具 举报

4#
发表于 2011-8-15 16:41:16 | 显示全部楼层
现在的版本对于一般的应用是没有问题.

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

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

使用道具 举报

5#
发表于 2011-8-15 16:43:52 | 显示全部楼层

回复 #7 scxiegangxy 的帖子

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

使用道具 举报

6#
发表于 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来检测是否一个文件,就顺便把这个也利用上了.)
回复

使用道具 举报

7#
发表于 2011-8-16 16:24:10 | 显示全部楼层

回复 #12 zxw 的帖子

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

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

使用道具 举报

8#
发表于 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 编辑 ]
回复

使用道具 举报

9#
发表于 2011-8-17 09:06:23 | 显示全部楼层

回复 #17 tingyue-wu 的帖子

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

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

使用道具 举报

10#
发表于 2011-8-17 09:12:27 | 显示全部楼层

回复 #18 zxw 的帖子

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

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

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

使用道具 举报

11#
发表于 2011-8-17 09:43:32 | 显示全部楼层

回复 #21 mygamexxx 的帖子

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

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

使用道具 举报

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

比如
menu=(fd0)/file.lst

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

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

使用道具 举报

13#
发表于 2011-8-21 11:09:25 | 显示全部楼层
直接改批处理当然也可以了,但是使用参数的更灵活.

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

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

使用道具 举报

14#
发表于 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 更新]
回复

使用道具 举报

15#
发表于 2011-8-21 21:43:18 | 显示全部楼层
注意看说明
1.前辍只支持单级目录。

2.前辍就是文件名的开头部份字符(ls /filepre),和扩展名没有关系。

3.空的参数必须是""否则会出错。例子filpre="",你不可以直接filpre= 这个语法是错误的。

4.前辍只支持一个,不像EXT参数一像支持多个。

比如你可以指定前辍ABC

则就会列出指定ROOT目录下以ABC开头的符合条件的文件。

这个前辍的功能实现了前面mygamexxx 所提到的功能

原帖由 mygamexxx 于 2011-8-17 09:38 发表
查找无扩展名的文件,比如当前根下查找文件名为ABC的文件,应如何设定参数?


使用新版就可以实现参数如下

ext=. filpre=ABC root=()/ cmd="echo %1"

查找当前根目录()/下以ABC开头的无扩展名的文件。


再次提醒:请注意新版cmd参数的变化.

[ 本帖最后由 chenall 于 2011-8-21 21:46 编辑 ]
回复

使用道具 举报

16#
发表于 2011-8-22 15:17:12 | 显示全部楼层
有需要的话下次再改一下.
回复

使用道具 举报

17#
发表于 2011-8-22 20:14:49 | 显示全部楼层
最后的更新....

[原创] GRUB4DOS 通用模块之文件选择模块[2011-08-22 更新]


2011-08-22 (最终版)
  • 优化了检测代码.
  • filpre支持子目录的检测.
回复

使用道具 举报

18#
发表于 2011-8-23 11:45:20 | 显示全部楼层
你可以试试加载UNIFONT字体看看能不能显示中文。理论上是可以的。
回复

使用道具 举报

19#
发表于 2011-8-23 11:46:09 | 显示全部楼层
空的参数要么就不要写,要么就=""

这两个的效果的一样的,建议空的参数就不要加上去了。
回复

使用道具 举报

20#
发表于 2011-8-23 20:44:21 | 显示全部楼层

回复 #48 mygamexxx 的帖子

只要加载了字体就会进入图形模式,(卸载字体后还是在图形模式下)

而VFONT只能在控制台下才可以使用.

你可以注意看一下界面上的显示就知道了,一般情况下图形模式显示的速度会比较慢.

解决办法很简单,如果你的菜单需要使用VFONT则在加载VFONT之前加一句
terminal console
回复

使用道具 举报

21#
发表于 2011-8-28 20:53:52 | 显示全部楼层

回复 #50 mygamexxx 的帖子

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"
m.root       指定根目录.(第一个被检查的目录)比如(hd0,4)/boot/或(hd0,5)
     注:该参数和m.devs参数配合使用时,将会只查找以上路径下的文件.例子:
     指定m.root=(hd0,4)/boot 或 /boot
     则,只会查找符合条件的磁盘/BOOT目录下的文件.
m.dirext     是否检测带扩展名的目录,设为任意值即启用,默认禁用,
                 除非有必要,否则不建议使用,启动这个参数会使得检测的速度变得很慢.
m.filpre   指定文件名前辍,过滤非以filpre参数开头的文件.(测试)
                 

加dirext参数试试,dirext=1
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-3 13:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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