Board logo

标题: 最大限度替换掉文本里的特殊字符 [打印本页]

作者: plp626     时间: 2008-4-14 13:09    标题: 最大限度替换掉文本里的特殊字符

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
-----------------------------
像控制字符<>&^%!/~'"
其他特殊字符-*\.,:这些都统统替换为指定的字符,大家讨论讨论
作者: slore     时间: 2008-4-14 13:18
你什么错误都不说?

@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
作者: plp626     时间: 2008-4-14 13:20
这个是"最大限度原样输出含特殊字符的指定行内容"代码,我做少量改动:
有缺陷,不能完全...

@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
作者: slore     时间: 2008-4-14 13:21
没有你的TEST……不清楚。

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

字符处理建议用VBS……通杀……只是个建议。。。
作者: zh159     时间: 2008-4-14 13:24
特殊字符处理还是尽量少用BAT吧
作者: plp626     时间: 2008-4-14 13:39
VBS 不会,现在只是在论坛里把现有的VBS代码当作范例,照猫画虎,一点都不系统,什么数组定义都不会,现在还没找到合适的教程。

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

作者: plp626     时间: 2008-4-14 13:45
用我一楼的代码:
@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)
/=
十分不解
作者: slore     时间: 2008-4-14 13:46
@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
作者: plp626     时间: 2008-4-14 13:55
slore的代码成功了,关键在
set s=%s:/=%
set s=%s:-=%
替换/的语句要放在-前面,why?
这是不是bug?
作者: slore     时间: 2008-4-14 19:07
@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 ]
作者: plp626     时间: 2008-4-14 19:52
谢谢slore的代码,理解了
请大家记住:

空字符串再次替换将非空