qj_tzy 发表于 2014-9-8 15:16:20

搜索硬盘一级目录下的vhd/vhdx并启动的grub4dos批处理

本帖最后由 qj_tzy 于 2014-9-15 22:22 编辑

    最近想用grub4dos实现以下功能:搜索硬盘各分区(包括mbr分区硬盘及gpt分区硬盘的隐藏分区)一级目录下的vhd/vhdx文件,列出选择菜单供用户按上下键+回车选择,用户选择后再出现“1-按原生vhd启动,2-按vboot驱动vhd启动,3-退出”三项选单的菜单。

   搜索文件并自动列选单的grub4dos批处理,我没有编写过,好像可以调用run,但没搞懂如何实现。诚请各位网友帮我,谢谢!

chenall 发表于 2014-9-8 15:57:49

搜索可以参考之前我写的批处理.

http://chenall.net/post/g4d_filelist/

至于选择后出现“1-按原生vhd启动,2-按vboot驱动vhd启动,3-退出”三项选单的菜单。
这个可以自己写一个菜单,具体路径用变量代替.

然后使用上面的filelist调用这个菜单就行了.

qj_tzy 发表于 2014-9-8 17:15:15

chenall 发表于 2014-9-8 15:57
搜索可以参考之前我写的批处理.

http://chenall.net/post/g4d_filelist/


谢谢指点,我按此试试,在实现过程中遇到问题时再向您请教。

qj_tzy 发表于 2014-9-9 11:52:09

chenall 发表于 2014-9-8 15:57
搜索可以参考之前我写的批处理.

http://chenall.net/post/g4d_filelist/


请教chenall,调用filelist的参数问题 :

1.若不另外编写grub4dos代码,直接调用filelist,在用户选择文件后,想直接执行命令/ntboot/ntboot nt6=(hdx,y)/vhd_file_dir/sys.vhd || /ntboot/ntboot vboot=(hdx,y)/vhd_file_dir/sys.vhd,其中cmd=""中的这句该如何写。

2.若想另外编写grub4dos代码,在调用filelist后,如何返回用户选择文件的硬盘号(hdx,y)、所在目录、文件名,以在后续的代码中再编写“1-按原生vhd启动,2-按vboot驱动vhd启动,3-退出”三项菜单,其调用参数又该如何写。

谢谢!

chenall 发表于 2014-9-9 12:40:10

qj_tzy 发表于 2014-9-9 11:52
请教chenall,调用filelist的参数问题 :

1.若不另外编写grub4dos代码,直接调用filelist,在用户选择 ...

1.cmd="ntboot nt6=%1 || ntboot vboot=%1"

2.先写好菜单,具本路径用变量file
cmd="set file=%1 ;; configfile (hdx,y)/path/menu.lst"

qj_tzy 发表于 2014-9-9 14:01:15

chenall 发表于 2014-9-9 12:40
1.cmd="ntboot nt6=%1 || ntboot vboot=%1"

2.先写好菜单,具本路径用变量file


谢谢,我试试,不清楚时再请教!

qj_tzy 发表于 2014-9-9 15:08:30

本帖最后由 qj_tzy 于 2014-9-9 15:43 编辑

chenall 发表于 2014-9-9 12:40
1.cmd="ntboot nt6=%1 || ntboot vboot=%1"

2.先写好菜单,具本路径用变量file


我用以下两句之一,均未弹出选择菜单,不知为何,还望指点:

set pathgrub=/g4dmenu/g4d/
set pntboot=/g4dmenu/ntboot/ntboot
find --set-root --ignore-floppies --ignore-cd %pathgrub%grldr

%pathgrub%filelist cmd="%pntboot% nt6=%1 || %pntboot% vboot=%1" ext=".vhdx .vhd"

#或下句
%pathgrub%filelist cmd="set sltfile=%1 ;; configfile %pathgrub%slt_boot_vhd_accept.lst" ext=".vhdx .vhd"
boot

说明:

1.您提供的那段选择文件批处理,我已复制保存utf-8格式命名为filelist,保存在/g4dmenu/g4d/
2.另编的菜单slt_boot_vhd_accept.lst,运行查看sltfile变量时,其内容为空。
3.我用的grub4dos为0.46a 2014-9-4。

chenall 发表于 2014-9-9 21:10:19

估计你是没有认真看文章

在批处理中调用需要使用%%1
即,需要多一个%1的参数,这个参数用于接收文件参数.可以放在cmd参数的任意位置.
并且支持类拟%~dpnx1的格式.

qj_tzy 发表于 2014-9-10 09:01:00

chenall 发表于 2014-9-9 21:10
估计你是没有认真看文章

今天有空时再看看,谢谢指点!

qj_tzy 发表于 2014-9-11 15:06:58

本帖最后由 qj_tzy 于 2014-9-11 15:15 编辑

chenall 发表于 2014-9-9 21:10
估计你是没有认真看文章
在批处理中调用需要使用%%1
即,需要多一个%1的参数,这个参数用于接收文件参数.可以放在cmd参数的任意位置.
并且支持类拟%~dpnx1的格式.

昨天我一直没来得及看,刚才我看了一下调用说明,仍然没看明白您贴出上段的意思,难道是将我在7楼贴出的调用语句中的%1直接换为%%1就可以了,还是该其他怎么做,我是在主启动代码中调用的,不是在批处理中调用的,我还是将%1换为%%1后测试,仍然未弹出选择文件的界面(我的硬盘中有多个VHD文件),因为没看懂您贴出上段的意思,所以现在不知该怎样做了,还望您能在百忙中继续给予指点,谢谢!

qj_tzy 发表于 2014-9-13 09:39:28

chenall 发表于 2014-9-9 21:10
估计你是没有认真看文章

今天我又测试,始终未出现文件选择菜单,不知是参数错误,还是其他原因,我现在已无法了,诚请chenall大在百忙中再次给予指点,谢谢!

chenall 发表于 2014-9-13 11:44:07

截图!!!!还有详细情况!!!!!

这个批处理不管怎么样都会有菜单显示的,除非运行错误.运行错误也会有提示的...




qj_tzy 发表于 2014-9-13 13:09:30

chenall 发表于 2014-9-13 11:44
截图!!!!还有详细情况!!!!!

这个批处理不管怎么样都会有菜单显示的,除非运行错误.运行错误也会有提示的. ...

调用命令如下:
set pathgrub=/g4dmenu/g4d/
set pntboot=/g4dmenu/ntboot/ntboot
find --set-root --ignore-floppies --ignore-cd %pathgrub%grldr

set m.cmd="%pntboot% nt6=%1 || %pntboot% vboot=%1"
set m.ext=".vhdx .vhd"
%pathgrub%filelist.lst
boot

截图如下:

chenall 发表于 2014-9-13 13:43:32

本帖最后由 chenall 于 2014-9-13 15:41 编辑

1.你的VHDX/VHD文件在什么目录下
2.devs参数没有指定时默认只找当前磁盘.

试试下面的查找所有硬盘

filelist.lst cmd="%pntboot% nt6=%1 || %pntboot% vboot=%1"ext=".vhdx .vhd" devs="--devices=h"


devs 指定了要查询的条件(find命令的参数),默认情况下是--set-root也就是只找当前分区

qj_tzy 发表于 2014-9-13 16:03:18

chenall 发表于 2014-9-13 13:43
1.你的VHDX/VHD文件在什么目录下
2.devs参数没有指定时默认只找当前磁盘.



谢谢指点!
刚才,我加了参数devs="--devices=h" 进行测试,结果仍然如13楼。

我用的是双硬盘,一个硬盘是MBR分区,在一个隐藏分区\vhdos\目录下存放有多个vhdx/vhd文件;
一个硬盘是GPT分区,在一个隐藏分区\vhdos_gpt\目录下存放有多个vhdx/vhd文件。

我是分别用两个硬盘启动grub4dos进行测试的,结果都一样。我把存放vhd文件的两个硬盘的该分区都改为显现分区后,也没查到。不知为何。还望指点,谢谢!

chenall 发表于 2014-9-13 16:19:43

总算回答了我的第一个问题VHD文件位置,你的文件不在根目录下,直接默认情况下肯定找不到了.

subdir 指定要查找的目录级数,默认1

你可以指定为2会查找二级目录下的,如果有更多级需要改为更大的数字(但越大速度越慢)

或者如果使用了相同的目录比如vhdos那也可以指定root参数 速度会比较快.

qj_tzy 发表于 2014-9-13 18:10:18

本帖最后由 qj_tzy 于 2014-9-13 18:11 编辑

chenall 发表于 2014-9-13 16:19
总算回答了我的第一个问题VHD文件位置,你的文件不在根目录下,直接默认情况下肯定找不到了.

subdir 指定 ...

谢谢指点!
我还以为subdir=1就是搜索一级目录,实际却是搜索根目录,刚才我加入subdir=2参数后,使用下句搜索成功:
pathgrub%filelist.lst cmd="%pntboot% nt6=%1 || %pntboot% vboot=%1" ext=".vhdx .vhd" devs="--devices=h" subdir=2
但就是遇vboot驱动的vhd系统首先以nt6方式执行会出错,所以改为
%pathgrub%filelist.lst cmd="set sltfile=%1 ;; configfile %pathgrub%slt_boot_vhd_accept.lst" ext=".vhdx .vhd" devs="--devices=h" subdir=2
但无搜索的过程(用上上句搜索用了几秒的时间,有等待的感觉,而此句无等待感觉),也未弹出选择文件的菜单,就直接进入了我自定义的菜单中,当然该菜单中也无选择的文件信息,是否又是参数出错?还请指点,谢谢!

chenall 发表于 2014-9-13 18:32:32

这个估计是有BUG,被直接执行了.我明天再试下.

qj_tzy 发表于 2014-9-13 21:07:14

chenall 发表于 2014-9-13 18:32
这个估计是有BUG,被直接执行了.我明天再试下.

好的,谢谢!

qj_tzy 发表于 2014-9-15 15:24:41

chenall 发表于 2014-9-13 18:32
这个估计是有BUG,被直接执行了.我明天再试下.

近一两天来,我已多次进入http://chenall.net/post/g4d_filelist/,关注其中的更新情况。

我感觉到您最近在忙于排除新版grub4dos的BUG,没能抽出时间来帮我解决17楼的问题。

但我还是非常想恳请您,抽空帮我解决一下这个问题,谢谢!

chenall 发表于 2014-9-15 16:01:29

抱歉,因为时间比较紧,我一会尽量抽空看一下,应该是这个批处理的BUG.

chenall 发表于 2014-9-15 18:30:00

试了一下,发现暂时不支持多命令或命令组合(要支持非常的麻烦),

建议你把命令弄成一个文件
比如下面的
%pathgrub%filelist.lst cmd="set sltfile=%1 ;; configfile %pathgrub%slt_boot_vhd_accept.lst" ext=".vhdx .vhd" devs="--devices=h" subdir=2

把cmd命令"set sltfile=%1 ;; configfile %pathgrub%slt_boot_vhd_accept.lst"放到一个批处理中比如ls_cmd
然后用以下命令调用,也就是cmd参数不支持复合命令
%pathgrub%filelist.lst cmd="ls_cmd %1" ext=".vhdx .vhd" devs="--devices=h" subdir=2



qj_tzy 发表于 2014-9-15 22:21:39

chenall 发表于 2014-9-15 18:30
试了一下,发现暂时不支持多命令或命令组合(要支持非常的麻烦),

建议你把命令弄成一个文件


在您的热心指点和帮助下,此问题已得到圆满解决,再次表示衷心感谢!

yuliwu2 发表于 2014-9-16 10:54:08

求楼主 分享下 该批处理成品

qj_tzy 发表于 2014-9-16 12:09:43

yuliwu2 发表于 2014-9-16 10:54
求楼主 分享下 该批处理成品

该批处理成品是chenall 大编写的,可在2楼下载。

我只是调用它而已。

2012sillian 发表于 2014-10-26 14:54:15

能否请楼主分享一下调用的具体命令及操作方法,我是纯菜鸟,完全没有入门,希望能向你们前辈学习,万分感谢!

qj_tzy 发表于 2014-10-27 13:54:31

2012sillian 发表于 2014-10-26 14:54
能否请楼主分享一下调用的具体命令及操作方法,我是纯菜鸟,完全没有入门,希望能向你们前辈学习,万分感谢 ...

title 搜索启动所有硬盘各分区(含gpt隐藏分区)根、一级、二级目录下的vhdx/vhd系统文件
filelist.lst cmd="slt_boot_file_cmd.lst %1" ext=".vhdx .vhd" devs="--devices=h" subdir=3
boot

#注:slt_boot_file_cmd.lst根据自己的实际情况编制

2012sillian 发表于 2014-10-27 23:16:22

qj_tzy 发表于 2014-10-27 13:54
title 搜索启动所有硬盘各分区(含gpt隐藏分区)根、一级、二级目录下的vhdx/vhd系统文件
filelist.lst cm ...

非常感谢,明天试一下,我也是两个盘,一个gpt,一个mbr

2012sillian 发表于 2014-10-28 19:17:07

qj_tzy 发表于 2014-10-27 13:54
title 搜索启动所有硬盘各分区(含gpt隐藏分区)根、一级、二级目录下的vhdx/vhd系统文件
filelist.lst cm ...

大大,我还是没搞定,菜单能搜索到各VHD系统,但是无法进入,显示KERNEL 没有加载。还是想麻烦你贡献一下你的全部资料“slt_boot_file_cmd.lst”,我想从COPY学起,再慢慢琢磨,很喜欢这个功能呀。虽然NTBOOT很好用,但需要手动输入,或清单只能加载有限的几个,有了你这个搜索并加载功能,就方便多了。谢谢!

qj_tzy 发表于 2014-10-28 21:00:30

本帖最后由 qj_tzy 于 2014-10-28 21:07 编辑

2012sillian 发表于 2014-10-28 19:17
大大,我还是没搞定,菜单能搜索到各VHD系统,但是无法进入,显示KERNEL 没有加载。还是想麻烦你贡献一下 ...

下载附件:


当然,此附件要根据自己的实际情况改进一下。

此附件还有以下功能:

title 搜索启动所有硬盘各分区(含gpt隐藏分区)根、一级、二级目录下的wim/vmdk/ima/img/iso系统文件
%pathgrub%filelist.lst cmd="%pathgrub%slt_boot_file_cmd.lst %1" ext=".wim .vmdk .ima .img .iso" devs="--devices=h" subdir=3
boot
页: [1] 2
查看完整版本: 搜索硬盘一级目录下的vhd/vhdx并启动的grub4dos批处理