Board logo

标题: set 能否替换%str%里的"*"为空? [打印本页]

作者: huzixuan     时间: 2007-5-4 07:45    标题: set 能否替换%str%里的"*"为空?
@echo off
set "str=123*"
set str=%str:^*=%
echo %str%
本以为这样可以,没想到却不行,不知是何故?

作者: ccwan     时间: 2007-5-4 08:10
简单一点的话:
@echo off
set "str=123*"
set str=%str:3*=3%
echo %str%

作者: huzixuan     时间: 2007-5-4 08:17
饿, ccwan 兄,再问一句,若是以下的情况,星号随机出现在字符串里 如果想单单的替换掉它,不知还有没有其他办法?
@echo off
set "str=1234*567*89"
set str=%str:3*=3%
echo %str%

作者: slore     时间: 2007-5-4 09:13
www.cn-dos.net/forum/viewthrea ... 看看里面的提取数字

作者: huzixuan     时间: 2007-5-4 11:04
slore兄 看了,但没有发现解决办法

作者: slore     时间: 2007-5-4 11:42
那个可以从任意字符里提取啊。。。就个新号应该可以T除吧

作者: ansipeter     时间: 2007-5-4 15:33
可以试试用FOR来完成,不过很死板
@echo off&setlocal
set "str=1234*567*89"
for /f "delims=* tokens=1,2*" %%a in ("%str%") do echo %%a%%b%%c

作者: ansipeter     时间: 2007-5-4 16:25
也可以试试下面的方法,比上面的通用性好些
@echo off&setlocal enabledelayedexpansion
set "str=1234*567*89.d[];534*896"
set a=0&set c=0
:loop
if not defined c (echo %b%&goto:eof)
if not "!str:~%a%,1!" equ "*" (set b=!b!!str:~%a%,1!&set c=!str:~%a%!&set/a a+=1&goto:loop) else (set/a a+=1&goto:loop)

作者: stornager     时间: 2007-5-4 16:52
请问ansipeter兄这句set "str=1234*567*89.d[];534*896"中的d[]是何用法??

作者: lxmxn     时间: 2007-5-4 17:11
为什么不用sed?
echo 1234*567*89.d[];534*896|sed "s/\*//g"

作者: huzixuan     时间: 2007-5-5 08:41
看来是没有好的办法来替换,只好考虑一下如 sed 之类的工具来完成了. 谢谢各位帮助小弟出谋划策!!

作者: digger     时间: 2007-5-5 13:42
真的没有好的办法了吗?
@echo off
set "str=12345*67*89"

:loop
for /f "delims=*" %%i in ("%str%") do call set "var=%%var%%%%i"
set "str_tmp=%str%"
set "str=%str:**=%"
if not "%str_tmp%"=="%str%" goto loop
echo "%var%"

pause

作者: huzixuan     时间: 2007-5-5 17:20
厉害! 是何原理?

作者: slore     时间: 2007-5-5 22:41
@echo off set "str=1234*5***sdf*67*8*9*abcd*" :loop for /f "delims=* tokens=1*" %%a in ("%str%") do ( if not "%%a"=="%str%" set str=%%a%%b&& goto loop ) echo %str% pause 谢谢digger更正 [ Last edited by slore on 2007-5-5 at 11:45 PM ]

作者: digger     时间: 2007-5-5 23:08
slore的代码比我的更加精简,佩服。 不过,&&要紧跟%%b,否则,会多出很多空格来的,你用 echo "%str%" 就可以看出来了。

作者: slore     时间: 2007-5-5 23:37
唉,谢谢了。我就说怎么老多循环一次。。。谢谢指出来。。我对P不是很熟悉啦。 脚本惯了,习惯一句一词空开。脚本染到一起就报错了。

作者: wordexport     时间: 2007-9-29 17:29
有价值的好贴吖!!!!!!!!!!!收获不小

作者: wordexport     时间: 2007-9-29 17:32
好东西大家顶