当前位置: 首页 > 图文教程 > 脚本技术 > DOS/BAT > 读取带敏感字符的行的批处理

DOS/BAT
用 Net 命令使局域网文件批量同步更新
如何用DOS命令删除顽固文件夹啊
dos下删除文件夹和文件的方法
Windows 2000下用DOS命令删除文件夹
批处理编程- -介绍
Ping命令详解 精简实用
DOS下FTP命令(FTP命令全集)
几个bat例子文件
最强的用批处理编写的病毒
批处理经典入门教程!(从不懂到高手)
Ghost常用参数详解
很详细的Ghost所有运行错误代码完全大揭秘
GHOST参数、命令操作指南
用批处理实现电脑自动关机
如何让批处理程序启动的时候最小化
如何让“>”显示出来批处理(dos)中的转义符号
批处理经常用到的bat推荐下
经过整理的一些dos/bat批处理教程
妙用脚本和批处理清除电脑中的痕迹
又一篇不错的批处理bat学习教程

DOS/BAT 中的 读取带敏感字符的行的批处理


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 224 ::
收藏到网摘: n/a

复制代码 代码如下:

@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