中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 01:43
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 最大限度替换掉文本里的特殊字符 查看 757 回复 10
楼 主 最大限度替换掉文本里的特殊字符 发表于 2008-04-14 13:09 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
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学习
2 发表于 2008-04-14 13:18 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
你什么错误都不说?

@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
3 发表于 2008-04-14 13:20 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
这个是"最大限度原样输出含特殊字符的指定行内容"代码,我做少量改动:
有缺陷,不能完全...

@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学习
4 发表于 2008-04-14 13:21 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
没有你的TEST……不清楚。

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

字符处理建议用VBS……通杀……只是个建议。。。
5 发表于 2008-04-14 13:24 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
特殊字符处理还是尽量少用BAT吧
6 发表于 2008-04-14 13:39 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
VBS 不会,现在只是在论坛里把现有的VBS代码当作范例,照猫画虎,一点都不系统,什么数组定义都不会,现在还没找到合适的教程。

我就随便那个test.txt大家测试下:

--------
http://www.bookiesky.com)
--------
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
7 发表于 2008-04-14 13:45 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
用我一楼的代码:
@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学习
8 发表于 2008-04-14 13:46 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
@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
9 发表于 2008-04-14 13:55 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
slore的代码成功了,关键在
set s=%s:/=%
set s=%s:-=%
替换/的语句要放在-前面,why?
这是不是bug?
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
10 发表于 2008-04-14 19:07 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
@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



@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 ]
11 发表于 2008-04-14 19:52 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
谢谢slore的代码,理解了
请大家记住:

空字符串再次替换将非空
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
论坛跳转: