A-A+

bat批命令集锦--字符串提取&替换等操作

2009年03月20日 学习随笔 暂无评论 阅读 1 次

读取带敏感字符的行

:: 出处:http://www.cn-dos.net/forum/viewthread.php?tid=25570

 

@echo off

:: 普通的 for+findstr 语句会忽略分号开头的行

:: findstr /n .* 用delims=:后,会忽略行首所有的冒号

:: 还有!、&、.等特殊符号需要处理

:: 以下代码可以准确提取这些敏感字符

:: 解决了 setlocal 最大递归层的问题(setlocal 两两嵌套处理超过15行内容时会带来此问题)

:: 能计算空行

:: code by jm 2006-12-12 thanks 3742668 CMD@XP

set num=0

for /f "delims=" %%i in ('findstr /n .* test.txt') do (

    set /a num+=1

    set "str=%%i"

    setlocal enabledelayedexpansion

    echo 第 !num! 行: !str:*:=!

    endlocal

)

pause

goto :eof

 

 

@echo off

:: 超过15行内容时,会带来 setlocal 最大递归层的问题

:: code by 3742668 2006-12-11 CMD@XP

@echo off

    setlocal enabledelayedexpansion

    set num=

    for /f "eol= delims=" %%i in ('findstr .* a.txt') do (

        setlocal DISABLEDELAYEDEXPANSION

        set "tmpstr=%%i"

        setlocal enabledelayedexpansion

        set /a num += 1

        set "!num!=!tmpstr!"

    )

    for /l %%i in (1,1,%num%) do echo 第%%i行: !%%i!

    pause

exit /b 0

 

@echo off

:: 不能正确提取带感叹号的内容

:: code by jm 2006-12-11 CMD@XP 

set num=0

setlocal enabledelayedexpansion

for /f "delims=" %%i in ('findstr /n .* test.txt') do (

    set /a num+=1

    set "str=%%i"

    echo 第 !num! 行: !str:*:=!

)

pause

goto :eof

 

@echo off

:: 结果要用引号括起来

:: code by jm 2006-12-11 CMD@XP 

set num=0

::setlocal enabledelayedexpansion

for /f "delims=" %%i in ('findstr /n .* test.txt') do (

    set /a num+=1

    set "str=%%i"

    call :display

)

pause

goto :eof

 

:display

echo 第 %num% 行: "%str:*:=%"

goto :eof

 

 

 

test.txt的内容

 

:abc

::xy

;

;;;ef &

;:;

::;;

||

&

 

^

!<

!

%

 

"

""

'

test

abc

逐行逐字显示文本

 

@echo off
:: 逐行逐字阅读文本
:: 不能处理特殊字符
:: 把半角双引号换成空格,把等号换成〓,兼容其他特殊字符
:: 能处理以分号打头的行
:: 能兼容unicode格式的文本
:: 每行之间空一行显示
:: Code by JM 2007-2-2 CMD@XP
:: 出处:http://www.cn-dos.net/forum/viewthread.php?tid=24889
:: 版本一:
for /f "delims= eol=" %%i in ('type %1') do (
    set "str=%%i"
    call set "str=%%str:"= %%"
    call :pickup
)
pause
goto :eof
:pickup
ping -n 1 127.1>nul
if "%str:~0,1%"=="=" set "str=〓%str:~1%"
set /p "=%str:~0,1%"<nul
set "str=%str:~1%"
if defined str goto pickup
echo.&echo.
goto :eof
:: 版本二:
@echo off
:: 与版本一的几点区别:
::   1、不能处理unicode文本
::   2、每行之间不再强行加上空行,并且能原样显示空行
for /f "delims= eol=" %%i in ('findstr /n .* %1') do (
    set "str=%%i"
    call set "str=%%str:"= %%"
    call set "str=%%str:*:=%%"
    call :pickup
)
echo.
pause
goto :eof
:pickup
if not defined str echo.&goto :eof
if "%str:~0,1%"=="=" set "str=〓%str:~1%"
set /p "=%str:~0,1%"<nul
ping -n 1 127.1>nul
set "str=%str:~1%"
if defined str goto pickup
echo.
goto :eof
:: 版本三:
@echo off&setlocal ENABLEDELAYEDEXPANSION
:: 能正确识别unicode格式的文本
:: 不能处理特殊字符
:: 不能处理以分号打头的行
:: 会把文本中的感叹号抛弃
:: 实际上,SET A="%1"和goto end 的表示是错误的
:: Code by lxmxn 2006-11-19 CMD@XP
:: 出处:http://www.cn-dos.net/forum/viewthread.php?tid=24889
FOR /F "DELIMS=" %%A IN ('type %1') DO (CALL;:__;"%%A")
endlocal&PAUSE&goto :EOF
::显示字符子函数————————————-
:__
        SET A="%1"
        SET B=0
        if "%A%"=="" goto end
        :BEGIN
        IF NOT "!A:~%B%,1!"=="" (
                SET/P=!A:~%B%,1!<NUL
                PING 127.1 -N 1 >NUL
                SET/A B+=1
                GOTO BEGIN
        ) else (
        :end
        echo/&echo
        )

标签:

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录