|
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 |
|
|
NeverAgain
初级用户
积分 67
发帖 40
注册 2008-1-31
状态 离线
|
『第
3 楼』:
不错,看来是高手,很感谢!!
但离我的期望还差。。。
有没有简洁点的?
|
|
2009-5-14 10:35 |
|
|
yishanju
银牌会员
[b]看你妹啊[/b]
积分 1488
发帖 1357
注册 2006-5-20
状态 离线
|
|
2009-5-14 15:59 |
|
|
NeverAgain
初级用户
积分 67
发帖 40
注册 2008-1-31
状态 离线
|
『第
5 楼』:
Quote: | 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 下载 http://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
状态 离线
|
|
2009-9-19 02:30 |
|
|
523066680
银牌会员
SuperCleaner
积分 2362
发帖 1133
注册 2008-2-2
状态 离线
|
|
2009-9-19 05:22 |
|
|
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 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
|
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 |
|