中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 最大限度替换掉文本里的特殊字符
作者:
标题: 最大限度替换掉文本里的特殊字符 上一主题 | 下一主题
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『楼 主』:  最大限度替换掉文本里的特殊字符

test.txt里同时有---与//
我就光替换掉下-/这两个字符都出错,不知为什么?
@echo off
for /f "delims=" %%a in (test.txt)do (
call :ti "%%a"
)
pause
:ti
set s=%~1
set s=%s:-=%
set s=%s:/=%
echo/%s%>>2.txt
goto:eof
-----------------------------
像控制字符<>&^%!/~'"
其他特殊字符-*\.,:这些都统统替换为指定的字符,大家讨论讨论



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-14 13:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

你什么错误都不说?

@echo off
for /f "delims=" %%a in (test.txt)do (
call :ti "%%a"
)
pause
goto:eof
:ti
set s=%~1
set s=%s:-=%
set s=%s:/=%
echo %s%>>2.txt

2008-4-14 13:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


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

这个是"最大限度原样输出含特殊字符的指定行内容"代码,我做少量改动:
有缺陷,不能完全...

@echo off
cd.>output.txt
for /f "eol= delims=" %%i in ('more test.txt') do (
    set "str=%%i"
    call set "str=%%str:*:=%%"
    if defined str (call :output) else echo.>>output.txt
)
start output.txt
exit

:output
set "str=%str:^=^^%"
set "str=%str:"=%"
set "str=%str:>=^>%"
set "str=%str:<=^<%"
set "str=%str:&=^&%"
set "str=%str:|=^|%"
set "str=%str:="%"
(call echo.%%str%%)>>output.txt
goto :eof



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-14 13:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

没有你的TEST……不清楚。

可能我写的TEST太简单了吧。。。

字符处理建议用VBS……通杀……只是个建议。。。

2008-4-14 13:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:  

特殊字符处理还是尽量少用BAT吧



2008-4-14 13:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


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

VBS 不会,现在只是在论坛里把现有的VBS代码当作范例,照猫画虎,一点都不系统,什么数组定义都不会,现在还没找到合适的教程。

我就随便那个test.txt大家测试下:
--------
http://www.bookiesky.com)
--------




山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-14 13:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


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

用我一楼的代码:
@echo off
for /f "delims=" %%a in (test.txt)do (
call :ti "%%a"
)
pause
:ti
set s=%~1
set s=%s:-=%
set s=%s:/=%
echo/%s%>>2.txt
goto:eof
怎么得到的2.txt竟然内容为:
/=
http:www.bookiesky.com)
/=
十分不解



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-14 13:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 8 楼』:  

@echo off
for /f "delims=" %%a in (test.txt)do (
call :ti "%%a"
)
pause
goto:eof
:ti
set s=%~1
set s=%s:/=%
set s=%s:-=%

if Not "%s%"=="" echo %s%>>2.txt

2008-4-14 13:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


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

slore的代码成功了,关键在
set s=%s:/=%
set s=%s:-=%
替换/的语句要放在-前面,why?
这是不是bug?



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-14 13:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 10 楼』:  

@echo off
set slore=
set slore1=s-l-o-r-e
set slore2=s/l/o/r/e

echo %slore:/=%
echo %slore1:/=%
echo %slore2:/=%

echo %slore:-=%
echo %slore1:-=%
echo %slore2:-=%

pause>nul

  Quote:
@echo off
for /f "delims=" %%a in (test.txt)do (
call :ti "%%a"
)
pause
goto:eof
:ti
set s=%~1
if Not "%s%"=="" set s=%s:-=%
if Not "%s%"=="" set s=%s:/=%

if Not "%s%"=="" echo %s%>>2.txt

[ Last edited by slore on 2008-4-14 at 08:01 PM ]

2008-4-14 19:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


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

谢谢slore的代码,理解了
请大家记住:

空字符串再次替换将非空



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-14 19:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: