中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【超级question】关于变量替换的星号
作者:
标题: 【超级question】关于变量替换的星号 上一主题 | 下一主题
NeverAgain
初级用户





积分 67
发帖 40
注册 2008-1-31
状态 离线
『楼 主』:  【超级question】关于变量替换的星号

大家都知道
echo %str:*:=%
会将变量str中从左端开始到第一次出现":"的一段字符替换为空然后再显示 比如
set a=123:56
echo %a:*:=%
将显示
56
可是问题来了,我现在要替换下面字符串(假定该字符串很长,含有的星号较多)里的星号为空格:
ab*c*d*A。*。*。R**T.《》*、*/*\*?.***.tt1254*5...too long!
那么怎么办? 我试了下用set %str:str1=str2% 这种方法遇到障碍,echo %str:*= %是行不通的! 若用for /f "delims=*" ... 或者其他做法繁琐, 我现在想到用转义字符^去转义*,然后用set %str:str1=str2%的方法(因为这样简洁,一行就搞定了!) 麻烦各位大虾指点迷津 [ Last edited by NeverAgain on 2009-5-14 at 08:58 ]


2009-5-14 08:56
查看资料  发短消息  网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 2 楼』:  

::把*号换为dir @echo off&setlocal enabledelayedexpansion set *=dir set str=ab*c*d*A。*。*。R**T.《》*、*/*\*?.***.tt1254*5...too long! :lp if "!str:~%n%,1!" equ "" goto :ok if "!str:~%n%,1!" equ "*" (set de=!de!!*!) else (set de=!de!!str:~%n%,1!) set/a n+=1 goto :lp :ok echo !de! pause




精简 [你的+我的+他的]=>[大家的] 个人网志
2009-5-14 09:52
查看资料  发送邮件  发短消息  网志  OICQ (37659560)  编辑帖子  回复  引用回复
NeverAgain
初级用户





积分 67
发帖 40
注册 2008-1-31
状态 离线
『第 3 楼』:  

不错,看来是高手,很感谢!! 但离我的期望还差。。。 有没有简洁点的?


2009-5-14 10:35
查看资料  发短消息  网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 4 楼』:  

echo ab*c*d*A。*。*。R**T.《》*、*/*\*?.***.tt1254*5...too long!|fr -f:"*" -t:" " FR 下载 baiy.cn/utils/fr/index.htm




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-5-14 15:59
查看资料  发短消息  网志   编辑帖子  回复  引用回复
NeverAgain
初级用户





积分 67
发帖 40
注册 2008-1-31
状态 离线
『第 5 楼』:  

Originally posted by yishanju at 2009-5-14 03:59 PM: echo ab*c*d*A。*。*。R**T.《》*、*/*\*?.***.tt1254*5...too long!|fr -f:"*" -t:" " FR 下载 baiy.cn/utils/fr/index.htm
thank you for your reply, but i want to get answer about pure batch scripts.


2009-5-17 04:15
查看资料  发短消息  网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 6 楼』:  

在这里转义无效,因为find的参数*就是当作字符来处理的,而转义的作用就是把控制符或特征符转换成字符 也就是说*号无法直接替换 要理解变量的存放方式 set b=^^^^* echo %b:^^^*%




49206C6F766520796F752067757973 54656C3A3133383238343036373837
2009-5-17 07:41
查看资料  发短消息  网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 7 楼』:  

好问题! 就是我也不知道怎么直接替换。。。。




山外有山,人外有人;低调做人,努力做事。 进入网盘(各种工具)~~ 空间~~cmd学习
2009-9-19 02:30
查看资料  发短消息  网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 8 楼』:  

怎么这种事情一定要批处理去做,真是的……




2009-9-19 05:22
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (523066680)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 9 楼』:  

好像是气不过,一定想做一个可以的。 我觉得花上这么多时间弄 真不值得。偏要取其短。
@echo off
set "everstr=ab*c*d*A。*。*。R**T.《》*、*/*\*?.***.tt1254*5...too long!"
:loop
for /f "tokens=1,* delims=*" %%a in ("%everstr%") do (set str=%%a#replace#%%b)
if not "%str:~-9%"=="#replace#" (set "everstr=%str%" &goto :loop)
set str=%str:~,-9%
echo %str:#replace#=#%
pause
vbs的
const str="ab*c*d*A。*。*。R**T.《》*、*/*\*?.***.tt1254*5...too long!"
inputbox "原字符为" &vbcrlf & str ,"Replace!",replace(str,"*","#")
[ Last edited by 523066680 on 2009-9-19 at 07:06 ]




2009-9-19 06:56
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (523066680)  编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 10 楼』:  

Originally posted by 523066680 at 2009-9-19 05:22 AM: 怎么这种事情一定要批处理去做,真是的……
这个*替换问题对数学表达式处理极为有用,你思考过没? bbs.bathome.cn/viewthread.php? ...




山外有山,人外有人;低调做人,努力做事。 进入网盘(各种工具)~~ 空间~~cmd学习
2009-9-19 12:27
查看资料  发短消息  网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 11 楼』:  

原来~ 如此~
这个*替换问题对数学表达式处理极为有用
这个根我强调不建议用批处理做有啥关系,你看我自己还写了呢。 [ Last edited by 523066680 on 2009-9-19 at 22:08 ]




2009-9-19 21:34
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (523066680)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: