无忧启动论坛

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

[求助] G4D如何动态截取字符串?

[复制链接]
跳转到指定楼层
1#
发表于 2011-10-14 09:56:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
例如:
set id="PCI\VEN_8086&DEV_27C1&CC_0106","iaStor"
set length=21
echo %id:~,%length%%

最后echo %id:~,%length%% 这句代码肯定是没办法正确执行的。CMD下可以用!代替最外层的%,G4D如何弄?
12#
 楼主| 发表于 2011-10-14 21:33:11 | 只看该作者

回复 #9 chenall 的帖子

谢谢C大
看来能理解这句代码后,就能读懂你的dmps.bat 了。
回复

使用道具 举报

11#
发表于 2011-10-14 16:17:58 | 只看该作者

回复 #10 zxw 的帖子

嗯,忘了转义符了。。
回复

使用道具 举报

10#
发表于 2011-10-14 16:05:32 | 只看该作者

回复 #9 chenall 的帖子

学习的机会来了。
\被转义了……
回复

使用道具 举报

9#
发表于 2011-10-14 15:49:33 | 只看该作者

回复 #7 hotdll 的帖子

给你一个最简单同时也是最复杂的写法

call Fn.0 0 "%.*s" %length% "%id%" | set tmp=

简单,因为只有一个语句; 复杂,因为对于大多数人来说,要理解这样的语句不太容易。
回复

使用道具 举报

8#
 楼主| 发表于 2011-10-14 12:43:48 | 只看该作者
原帖由 zhaohj 于 2011-10-14 11:28 发表
wenv set tmp=${id:1:${length}}

也许是bug吧,让C大看看!

赵大,我之所以提出这个问题就是因为我不适用WENV。。。。。
10月09日的grldr好像不支持wenv的call命令调用系统的call命令


呵呵,不过还是谢谢!
回复

使用道具 举报

7#
 楼主| 发表于 2011-10-14 12:38:55 | 只看该作者

回复 #6 chenall 的帖子

能不能把两三个语句写出来?
谢谢
回复

使用道具 举报

6#
发表于 2011-10-14 12:37:14 | 只看该作者

回复 #3 快雪时晴 的帖子

这个话有点问题。

GRUB4DOS的所有东西都是公开的。关键是懂不懂得使用。懂不懂得找资料。

像一楼的问题,不使用WENV都可以有N种解决方案。如果经常看我写的批处理就会看到有类似问题的解决方案。

而且没有心要那么麻烦,两三个语句就可以搞定了。

@zhaohj
wenv已经不再更新,有问题可以自己想办法解决。

[ 本帖最后由 chenall 于 2011-10-14 12:38 编辑 ]
回复

使用道具 举报

5#
发表于 2011-10-14 11:49:35 | 只看该作者
原帖由 快雪时晴 于 2011-10-14 11:06 发表
个人觉得G4D应该把内部公共函数接口暴露出来,和命令一样可以直接引用,不用依赖wenv,也不用把批处理写得很复杂

当然,还蛮崇拜zxw


呵呵,看来 grubcall 的需求还是有的。
回复

使用道具 举报

4#
发表于 2011-10-14 11:28:31 | 只看该作者
wenv set tmp=${id:1:${length}}

也许是bug吧,让C大看看!
回复

使用道具 举报

3#
发表于 2011-10-14 11:06:46 | 只看该作者
个人觉得G4D应该把内部公共函数接口暴露出来,和命令一样可以直接引用,不用依赖wenv,也不用把批处理写得很复杂

当然,还蛮崇拜zxw
回复

使用道具 举报

2#
发表于 2011-10-14 10:40:38 | 只看该作者
!BAT
::id与length都是动态的?如是,不用wenv的话可以这样:
set id="PCI\VEN_8086&DEV_27C1&CC_0106","iaStor"
set tmp=%@retval%
set length=21
set /a tmp=%tmp%-%length%
echo -n %id% > (md)0x200+1
cat --skip=%tmp% (md)0x200+1 | set tmp=
::最后获取的tmp值应该就是你想的结果。
=========================
猜测你实际想要提取的结果是:PCI\VEN_8086&DEV_27C1
如不能确定是否有引号,可以这样:
set id="PCI\VEN_8086&DEV_27C1&CC_0106","iaStor"
set length=21
call :man_char %id%
exit
:man_char
echo -n %~1 > (md)0x200+1
cat --length=%length% (md)0x200+1 | set tmp=
exit

[ 本帖最后由 zxw 于 2011-10-14 16:01 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-1 00:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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