中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 请问下关于set延迟变量的 上一主题 | 下一主题
xue2ye
初级用户





积分 26
发帖 11
注册 2006-11-11
状态 离线
『楼 主』:  请问下关于set延迟变量的

不好意思 ,也许是我太笨了,我看遍了论坛里关于这方面的 还是没懂。
@echo off

    echo 去掉引号:
    call :replace 1.txt "

    echo.
    echo 替换字符:
    call :replace 1.txt "谢谢您" "感谢您"

    pause>nul
goto :eof

:replace
    setlocal ENABLEDELAYEDEXPANSION
    for /f "tokens=1* delims=" %%i in (%1) do set var=%%i & echo !var:%2=%3!
    endlocal
goto :eo
象这个批处理,我怎么都弄不明白什么意思。。尤其是for /f "tokens=1* delims=" %%i in (%1) do set var=%%i & echo !var:%2=%3!
里!var:%2=%3! 这句话的意思。。其他一关于 ! 的问题我就看不懂。哪位给我指点一下呀。结合上面那个例子讲最好了。set 命令 我看 自带的帮助都那个 一元运算符不知道是什么意思。。。谢谢啊。。

2006-11-13 08:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  


  在论坛里搜索一下吧。关键字:"变量延迟"。


2006-11-13 09:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xue2ye
初级用户





积分 26
发帖 11
注册 2006-11-11
状态 离线
『第 3 楼』:  

搜过了就是看不懂。。不好意思哈。笨了点。

2006-11-13 09:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  


  Re  xue2ye:

  简单的给你讲一下吧:

  因为命令解释器(%comspec%)在执行for命令时,首先将for命令里的变量扩展为变量的值,所以,当我们执行时,有的变量是根据for命令得到的,这样,变量还没有被定义就被命令解释器给解释(扩展)了,显然是得不到我们想要的,如果要for命令执行之后再扩展变量的值,那么就要启用变量延迟功能来达到这个目的。要启用变量延迟功能,必须在for命令之前首先定义它,用"setlocal ENABLEDELAYEDEXPANSION"就可以开启变量延迟功能。当再次引用变量时,就要用两个"!"将变量包含起来(比如"!var!"),以扩展变量的为其值。

  时间关系,讲解得不是很详细,你可以在论坛里面搜索更多的关于变量延迟的详细说明的。


   此帖被 +1 点积分     点击查看详情   
评分人:【 redtek 分数: +1  时间:2006-11-14 23:56


2006-11-13 10:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xue2ye
初级用户





积分 26
发帖 11
注册 2006-11-11
状态 离线
『第 5 楼』:  

for /f "tokens=1* delims=" %%i in (%1) do set var=%%i & echo !var:%2=%3!
主要是这句不懂。这句能解释下吗 他这个 !var:“感谢您”=“谢谢您”!  实在想不出来

2006-11-13 11:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  


   !var:“感谢您”=“谢谢您”!——讲变量var里面所有的"感谢您"换成"谢谢您"!  


2006-11-13 11:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xue2ye
初级用户





积分 26
发帖 11
注册 2006-11-11
状态 离线
『第 7 楼』:  

不好意思,还是没理解。。为什么要用感谢您和谢谢您呢。我换了别的好象就不行了。我看了论坛里大部分关于set的 好象都是只讲了原理,没讲具体用法。能讲讲吗。

2006-11-15 06:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 8 楼』:  

有些东西确实很抽象,不举个例子大多数人是不明白的。请各位版主、高手在解答问题时尽量加入一些例子,便于理解。谢谢



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-11-15 07:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 9 楼』:  

这里有一个关于SET的详细应用实例和一些相关的基础内容的资料~:)
你需要的例子里面全有,请从头到尾照着里面的代码全做一遍~:)

简单索引关于SET变量、延时变量、各种符号的用法……
[url]http://www.cn-dos.net/forum/viewthread.php?tid=24549&page=1&sid=688Nn2#pid149853[url]

[ Last edited by redtek on 2006-11-15 at 07:43 AM ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-15 07:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xue2ye
初级用户





积分 26
发帖 11
注册 2006-11-11
状态 离线
『第 10 楼』:  

我就是看不懂啊。跟着做会自己做就不会了。。你给我举个简单的例子哇。。。谢谢啊

2006-11-15 07:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 11 楼』:  

从代码格式上看似乎是我写的,不过现在看来代码实在是很不成熟的。
至于"为什么要用感谢您和谢谢您",那就要结合 1.txt 的内容来看了,因为参数%1是1.txt。
建议初学者不要把参数与变量混在一起研究,先一句句set地弄明白了再结合其它的。
@echo off
    set str=www.cn-dos.net
    echo 替换前变量str的内容为: %str%
    echo 执行set str=%%str:www=bbs%%
    echo 替换后变量str的内容为: %str:www=bbs%
pause


2006-11-15 07:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xue2ye
初级用户





积分 26
发帖 11
注册 2006-11-11
状态 离线
『第 12 楼』:  

set str=%%str:www=bbs%%这句什么意思??

2006-11-15 08:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by xue2ye at 2006-11-14 20:33:
set str=%%str:www=bbs%%这句什么意思??

这句是显示给你看的,要显示一个%,得%%才行
执行“echo set str=%%str:www=bbs%%”后显示为:set str=%str:www=bbs%


将“www.cn-dos.net”指派给变量“str”,再用%str:www=bbs%将“www.cn-dos.net”里的“www”替换为“bbs”

2006-11-15 09:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dshh98
新手上路





积分 3
发帖 2
注册 2006-11-6
状态 离线
『第 14 楼』:  

偶也还没看懂``` 555555555

2006-11-15 13:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 15 楼』:  

学习不要求新奇,要从基本的东西开始。建议dshh98先把dos基本命令仔细看看,多多实践,再探讨高深的东西。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-11-15 21:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: