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
http://www.cn-dos.net/forum/viewthread.php?tid=30232&fpage=2

看看里面的提取数字
作者: 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
好东西大家顶