中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 02:42
48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 最大限度替换掉文本里的特殊字符
可打印版本  758 / 10
第1楼 plp626 发表于 2008-04-14 13:09
银牌会员 发帖 1,020 积分 2,278
最大限度替换掉文本里的特殊字符
test.txt里同时有---与//
我就光替换掉下-/这两个字符都出错,不知为什么?


-----------------------------
像控制字符<>&^%!/~'"
其他特殊字符-*\.,:这些都统统替换为指定的字符,大家讨论讨论
第2楼 slore 发表于 2008-04-14 13:18
铂金会员 发帖 2,478 积分 5,212
你什么错误都不说?

@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楼 plp626 发表于 2008-04-14 13:20
银牌会员 发帖 1,020 积分 2,278
这个是"最大限度原样输出含特殊字符的指定行内容"代码,我做少量改动:
有缺陷,不能完全...

@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
第4楼 slore 发表于 2008-04-14 13:21
铂金会员 发帖 2,478 积分 5,212
没有你的TEST……不清楚。

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

字符处理建议用VBS……通杀……只是个建议。。。
第5楼 zh159 发表于 2008-04-14 13:24
金牌会员 发帖 1,467 积分 3,687
特殊字符处理还是尽量少用BAT吧
第6楼 plp626 发表于 2008-04-14 13:39
银牌会员 发帖 1,020 积分 2,278
VBS 不会,现在只是在论坛里把现有的VBS代码当作范例,照猫画虎,一点都不系统,什么数组定义都不会,现在还没找到合适的教程。

我就随便那个test.txt大家测试下:
第7楼 plp626 发表于 2008-04-14 13:45
银牌会员 发帖 1,020 积分 2,278
用我一楼的代码:


怎么得到的2.txt竟然内容为:

十分不解
第8楼 slore 发表于 2008-04-14 13:46
铂金会员 发帖 2,478 积分 5,212
@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楼 plp626 发表于 2008-04-14 13:55
银牌会员 发帖 1,020 积分 2,278
slore的代码成功了,关键在
set s=%s:/=%
set s=%s:-=%
替换/的语句要放在-前面,why?
这是不是bug?
第10楼 slore 发表于 2008-04-14 19:07
铂金会员 发帖 2,478 积分 5,212
@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楼 plp626 发表于 2008-04-14 19:52
银牌会员 发帖 1,020 积分 2,278
谢谢slore的代码,理解了
请大家记住:

空字符串再次替换将非空
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023