中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 19:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » set 能否替换%str%里的"*"为空?
楼 主 set 能否替换%str%里的"*"为空? 发表于 2007-05-04 07:45 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线

@echo off
set "str=123*"
set str=%str:^*=%
echo %str%

本以为这样可以,没想到却不行,不知是何故?
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
2 发表于 2007-05-04 08:10 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
UID 63486
来自 河北廊坊
状态 离线
简单一点的话:
@echo off
set "str=123*"
set str=%str:3*=3%
echo %str%
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +1 2007-05-05 08:41
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
3 发表于 2007-05-04 08:17 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
饿, ccwan 兄,再问一句,若是以下的情况,星号随机出现在字符串里
如果想单单的替换掉它,不知还有没有其他办法?


@echo off
set "str=1234*567*89"
set str=%str:3*=3%
echo %str%
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
my3439955 +2 2007-06-05 19:39
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
4 发表于 2007-05-04 09:13 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +1 2007-05-05 08:42
5 发表于 2007-05-04 11:04 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
slore兄
看了,但没有发现解决办法
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
6 发表于 2007-05-04 11:42 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
那个可以从任意字符里提取啊。。。就个新号应该可以T除吧
7 发表于 2007-05-04 15:33 ·  中国 北京 顺义区 联通
中级用户
★★
替身
积分 269
发帖 130
注册 2007-03-23 21:41
UID 82683
性别 女
状态 离线
可以试试用FOR来完成,不过很死板

@echo off&setlocal
set "str=1234*567*89"
for /f "delims=* tokens=1,2*" %%a in ("%str%") do echo %%a%%b%%c
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +1 2007-05-05 08:42
8 发表于 2007-05-04 16:25 ·  中国 北京 顺义区 联通
中级用户
★★
替身
积分 269
发帖 130
注册 2007-03-23 21:41
UID 82683
性别 女
状态 离线
也可以试试下面的方法,比上面的通用性好些

@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)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +2 2007-05-05 08:42
9 发表于 2007-05-04 16:52 ·  中国 湖北 武汉 电信
中级用户
★★
scriptlover
积分 328
发帖 131
注册 2007-03-25 22:17
UID 82910
性别 男
状态 离线
请问ansipeter兄这句set "str=1234*567*89.d[];534*896"中的d[]是何用法??
scriptlover
Be with script forever!!
10 发表于 2007-05-04 17:11 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
为什么不用sed?
echo 1234*567*89.d;534*896|sed "s/\*//g"
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +1 2007-05-05 08:41
11 发表于 2007-05-05 08:41 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
看来是没有好的办法来替换,只好考虑一下如 sed 之类的工具来完成了.
谢谢各位帮助小弟出谋划策!!
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
12 发表于 2007-05-05 13:42 ·  中国 广东 电信
初级用户
游荡的孤魂
积分 79
发帖 29
注册 2007-04-02 11:08
UID 83714
性别 男
来自 湖南
状态 离线
真的没有好的办法了吗?

@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
13 发表于 2007-05-05 17:20 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
厉害!
是何原理?
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
14 发表于 2007-05-05 22:41 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
@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 ]
15 发表于 2007-05-05 23:08 ·  中国 广东 电信
初级用户
游荡的孤魂
积分 79
发帖 29
注册 2007-04-02 11:08
UID 83714
性别 男
来自 湖南
状态 离线
slore的代码比我的更加精简,佩服。

不过,&&要紧跟%%b,否则,会多出很多空格来的,你用 echo "%str%" 就可以看出来了。
论坛跳转: