标题: 最大限度替换掉文本里的特殊字符
[打印本页]
作者: 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的代码,理解了
请大家记住:
空字符串再次替换将非空