无忧启动论坛

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

[已解决] ////////////////////////////

[复制链接]
跳转到指定楼层
1#
发表于 2013-6-12 08:54:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
16#
 楼主| 发表于 2013-6-17 11:51:44 | 只看该作者
zhaohj 发表于 2013-6-17 09:17
仔细看了下wenv的源程序,发现:
#define QUOTE_CHAR (*(unsigned long *)(ENVI[_WENV_]+0x30))
引号是QU ...

多谢赵大,回头试试
回复

使用道具 举报

15#
发表于 2013-6-17 09:17:57 | 只看该作者
本帖最后由 zhaohj 于 2013-6-17 10:20 编辑

仔细看了下wenv的源程序,发现:
#define QUOTE_CHAR (*(unsigned long *)(ENVI[_WENV_]+0x30))
引号是QUOTE_CHAR值控制的,在0x4ca30位置
wenv有个内部不透明的命令:wenv config QUOTE_CHAR "
要取消,可用write 0x4ca30 0
要设置成引号,也可用write 0x4ca30 0x22
这样就可以控制引导的处理了。

Snap0.jpg (38.84 KB, 下载次数: 47)

Snap0.jpg

点评

多谢赵大,回头试试  详情 回复 发表于 2013-6-17 11:51
回复

使用道具 举报

14#
发表于 2013-6-15 13:15:22 | 只看该作者
本帖最后由 zhaohj 于 2013-6-15 13:33 编辑
sratlf 发表于 2013-6-14 13:06
(md)0x266+2 这块地址能随便使用吗


打错了,0x266改成0x226,0x267改成0x227
不过,(md)0x266+2确实也可以使用的,这两个扇区是用户使用的变量保留扇区,为wenv保留的。
回复

使用道具 举报

13#
发表于 2013-6-14 13:06:36 | 只看该作者
(md)0x266+2 这块地址能随便使用吗

点评

打错了,0x266改成0x226,0x267改成0x227  详情 回复 发表于 2013-6-15 13:15
回复

使用道具 举报

12#
发表于 2013-6-14 11:29:18 | 只看该作者
本帖最后由 zhaohj 于 2013-6-15 13:14 编辑

先贴一个字符串处理的P处理,以后再搞一个for命令的P处理,这样SRSF6N可以去掉WENV了。说实话,WENV功能不错,丢弃也可惜的。
extract.bat
!BAT
# 此批处理用来增强字符串的处理,实现wenv中字符串分隔截取的部分功能
# extract.bat 变量名 功能号(#、##、%、%%) 分隔符
# 变量名是GRUB4DOS的一个变量,必须已经存在;下面都是.为分隔符
# ${VAR#STRING}         删除STRING前面的字符;           如aa.bb.cc -> bb.cc
# ${VAR##STRING} 删除STRING前面的字符,贪婪模式;  如aa.bb.cc -> cc
# ${VAR%STRING}         删除STRING后面的字符;           如aa.bb.cc -> aa.bb
# ${VAR%%STRING} 删除STRING后面的字符,贪婪模式;  如aa.bb.cc -> aa
set tmp=
setlocal
debug off
if exist %1 goto :extract
echo $[0101] extract module for grub4dos by zhaohj 2013-06-15
echo $[0102] usage:
echo $[0106] extract VAR #  string , Return the string at first separator next  
echo $[0106] extract VAR ## string , Return the string at last  separator next
echo $[0106] extract VAR %  string , Return the string at first separator front
echo $[0106] extract VAR %%% string , Return the string at last  separator front
echo
exit

:extract
if not "%2"=="#" if not "%2"=="##" if not "%2"=="%" if not "%2"=="%%%%" exit
set tmp=%2
if not exist tmp exit
echo %%%1%% > (md)0x226+2
if "%tmp%"=="#" goto :extract_#
if "%tmp%"=="##" goto :extract_##
if "%tmp%"=="%" goto :extract_1
if "%2%"=="%%%" goto :extract_2
goto :extract_ok
:extract_#
cat --locate=%3 --number=1 (md)0x226+1 > nul
set /A skip=%?_WENV%
if not exist skip exit
set /A skip=%skip%+1
cat --skip=%skip% (md)0x226+1 >> (md)0x227+1
goto :extract_ok

:extract_##
cat --locate=%3 (md)0x226+1 > nul
set /A skip=%?_WENV%
if not exist skip exit
set /A skip=%skip%+1
cat --skip=%skip% (md)0x226+1 >> (md)0x227+1
goto :extract_ok

:extract_1
cat --locate=%3 (md)0x226+1 > nul
set /A skip=%?_WENV%
if not exist skip exit
cat --length=%skip% (md)0x226+1 >> (md)0x227+1
goto :extract_ok

:extract_2
cat --locate=%3 --number=1 (md)0x226+1 > nul
set /A skip=%?_WENV%
if not exist skip exit
cat --length=%skip% (md)0x226+1 >> (md)0x227+1

:extract_ok
cat (md)0x227+1 | set tmp=
endlocal && set tmp=%%tmp%%
回复

使用道具 举报

11#
 楼主| 发表于 2013-6-14 11:24:16 | 只看该作者
zhaohj 发表于 2013-6-14 11:20
使用WENV,需要初始化一下。最好在程序的开头使用下面的语句:
setlocal
wenv reset

多谢提醒,赵大的 SRSF6N 啥时候更新一下?还是希望能够去掉WENV,能不用外部程序的地方尽量不用了,因为G4D一直在更新,而外部命令又逐渐被抛弃,不更新了,使得一些经典的工具总出现莫名的问题……

望赵大慎重考虑一下,SRSF6N 真的很强大,丢弃了可惜!
回复

使用道具 举报

10#
发表于 2013-6-14 11:20:19 | 只看该作者
使用WENV,需要初始化一下。最好在程序的开头使用下面的语句:
setlocal
wenv reset
endlocal
----------------------
这样以前的变量也保留,初始化也完成。

点评

多谢提醒,赵大的 SRSF6N 啥时候更新一下?还是希望能够去掉WENV,能不用外部程序的地方尽量不用了,因为G4D一直在更新,而外部命令又逐渐被抛弃,不更新了,使得一些经典的工具总出现莫名的问题…… 望赵大慎重考  详情 回复 发表于 2013-6-14 11:24
回复

使用道具 举报

9#
发表于 2013-6-13 09:08:08 | 只看该作者
wenv 很早就不再维护了,基本上所有WENV可以实现的功能,现在的GRUB4DOS都能实现了.
回复

使用道具 举报

8#
发表于 2013-6-13 08:50:18 | 只看该作者
本帖最后由 zhaohj 于 2013-6-13 08:58 编辑

我今天重现了楼主的问题,发现了wenv的一个bug:
1:oem.txt
id="PCI\VEN_1106&DEV_6287&CC_0106","viamraid"
id="PCI\VEN_1106&DEV_3349&CC_0104","viamraid"
------------
2:oem.bat
!BAT
debug 0
WENV for /f "eol=; tokens=1-3 delims==," %i in ( /oem.txt ) do (set a=$u,%j ; set b=%k ; echo -n $ ; echo $${a}=$${b})
=====================
运行oem.bat确实出现了楼主的问题。
排查问题发现是g4d的变量与wenv保存的变量初始化问题引起的,改成下面解决:
!BAT
debug 0
setlocal
set *
WENV for /f "eol=; tokens=1-3 delims==," %i in ( /oem.txt ) do (set a=$u,%j ; set b=%k ; echo -n $ ; echo $${a}=$${b})
endlocal

====================
请Chenall大排查具体问题所在

Snap1.jpg (86.12 KB, 下载次数: 43)

Snap1.jpg
回复

使用道具 举报

7#
发表于 2013-6-12 16:05:24 | 只看该作者
WENV去掉引号也有个比较简单的方法,如:
wenv set a="abcd"
wenv set a=${a:1:-1}


回复

使用道具 举报

6#
 楼主| 发表于 2013-6-12 13:19:55 | 只看该作者
zhaohj 发表于 2013-6-12 11:09
很正常啊!

不管我怎么弄,不管从ISO启动,还是将G4D写入MBR,通通失败,请教赵大,还有没有办法手动把这些双引号给弄掉?

我记得以前可以的,不知道为什么,今天怎么试都不行:

QQ截图20130612131647.png (22.29 KB, 下载次数: 51)

QQ截图20130612131647.png
回复

使用道具 举报

5#
 楼主| 发表于 2013-6-12 11:14:34 | 只看该作者
zhaohj 发表于 2013-6-12 11:09
很正常啊!

那就奇怪了,郁闷!
回复

使用道具 举报

4#
发表于 2013-6-12 11:09:30 | 只看该作者
很正常啊!                          

Snap0.jpg (136.23 KB, 下载次数: 37)

Snap0.jpg

点评

不管我怎么弄,不管从ISO启动,还是将G4D写入MBR,通通失败,请教赵大,还有没有办法手动把这些双引号给弄掉? 我记得以前可以的,不知道为什么,今天怎么试都不行:  详情 回复 发表于 2013-6-12 13:19
那就奇怪了,郁闷!  详情 回复 发表于 2013-6-12 11:14
回复

使用道具 举报

3#
 楼主| 发表于 2013-6-12 10:26:32 | 只看该作者
zhaohj 发表于 2013-6-12 10:21
在我印象中,wenv for /f 命令会自动处理两边同时是引号的。看看你的WENV版本是否最新。不然可从SRSF6N中提 ...

已经试过了,一样不能去双引号的。

但很奇怪,在srsf6n的环境下就可以去除引号,把wenv提取出来就不行了,不知道还有没有别的办法?
回复

使用道具 举报

2#
发表于 2013-6-12 10:21:11 | 只看该作者
在我印象中,wenv for /f 命令会自动处理两边同时是引号的。看看你的WENV版本是否最新。不然可从SRSF6N中提取。

点评

已经试过了,一样不能去双引号的。 但很奇怪,在srsf6n的环境下就可以去除引号,把wenv提取出来就不行了,不知道还有没有别的办法?  详情 回复 发表于 2013-6-12 10:26
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-14 19:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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