联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
@echo off :: 思路:把所有的特殊符号转义之后输出 :: 所受限制:要处理的文件不能用引号括起来; cd.>output.txt for /f "delims=" %%i in ('findstr /n .* 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:"=^"%" call echo.%%str%%>>output.txt goto :eof
@echo off cd.>output.txt for /f "delims=" %%i in ('findstr /n .* 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
@echo off cd.>output.txt for /f "delims=" %%i in ('findstr /n .* test.txt') do ( set "var=%%i" setlocal enabledelayedexpansion set var=!var:*:=! (echo.!var!)>>output.txt endlocal ) start output.txt
"aou"eo ;euou%^> ::::aeui :::E2uo alejou 3<o2io| ^aue||%ou !aue! aoue eou 2 !str!auoeu!ueo && euo 8 ueyi^^^^aueuo2 ~ ! @ # $ % ^ & * ( () " ok " No " <>nul set ok=^
@echo off for /f "tokens=1 delims=" %%a in ('findstr /n .* test.txt') do set "var=%%a" & call :change goto :eof :change set "var=%var:^=^^%" set "var=%var:>=^>%" set "var=%var:<=^<%" set "var=%var:&=^&%" set "var=%var:|=^|%" set "var=%var:*:=%" echo.%var%
~ ! @ # $ % ^ & * ( () " ok " No " <>nul set ok=^
此时不应有 >。
Originally posted by bjsh at 2007-5-18 12:53: 唉;三个引号的问题啊; 就好像 echo fsdg"dsgsa"gds" >55.txt 不会写到55.txt里一样; 我在想想吧; 难道真得非写成不可见字符.
Originally posted by namejm at 2007-5-18 01:26 PM: 经过测试,应该是引号为奇数个的时候才会有这种情况,这是 call 语句调用子过程的时候 echo 语句的一大缺陷,可能只有替换为其他字符才行。 ...
@echo off set var= for /f "delims=" %%a in ('findstr /n .* test.txt') do ( set "var=%%a" call set "var=%%var:"=%%" call :change ) goto :eof :change set "var=%var:^=^^%" set "var=%var:>=^>%" set "var=%var:<=^<%" set "var=%var:&=^&%" set "var=%var:|=^|%" set "var=%var:*:=%" if not defined var echo. & goto :eof call set "var=%%var:="%%" echo.%var%
c:\>set "var=~ ! @ # $ % ^ & * ( () " ok " No " <>nul" 此时不应有 >。
c:\>for /f "delims=" %a in (test.txt) do set "var=%a" c:\>set "var=~ ! @ # $ % ^ & * ( () " ok " No " <>nul" c:\>set var var=~ ! @ # $ % ^ & * ( () " ok " No " <>nul
~ ! @ # $ % ^ & * ( () " ok " No " <>nul