分享

批处理学习17(for的使用-6)

 菜园子图书馆 2014-02-06
在前面,我们讲到使用 skip= 来跳过不需要的行。但在实际使用中,我们需要更复杂的行筛选,该如何实现呢?由于这一功能主要是依靠其他命令完成的,且方法途径众多。所以仅举部分示例。下面批处理用来生成所需的被解析文件:

 

@echo off
(echo hanye
echo han
echo guxing
echo gu
echo ye
echo xing
echo hanyeguxing)>>Hanyeguxing.txt

 

1,筛选符合条件的行:

 

::示例47—显示行首是h,行尾是g的所有行

@echo off
for /f "delims=" %%i in (Hanyeguxing.txt) do (
set Han=%%i
setlocal enabledelayedexpansion
if "!Han:~,1!!Han:~-1!"=="hg" echo !Han!
)
pause

 

2,筛选出符合条件的前一行。

 

::示例48—显示所有包含“xing”的行的前(上)一行

@echo off
for /f "delims=" %%i in (Hanyeguxing.txt) do (
set Han=%%i
setlocal enabledelayedexpansion
if "!Han:xing=!" neq "!Han!" echo;!Ye!
endlocal
set Ye=%%i
)
pause

 

3,筛选出符合条件的后第二行。

 

::示例48—显示所有包含“han”的行的后(下)第二行

@echo off&setlocal enabledelayedexpansion
set Ye=0
for /f "delims=" %%i in (Hanyeguxing.txt) do (
if !Ye! leq 1 (
if !Ye! equ 1 set /a Ye-=1 & echo;%%i
set Han=%%i
if "!Han:han=!" neq "!Han!" set Ye=2
) else set /a Ye-=1
)
pause

 

4,筛选某一特定行的前(上)、后(下)一行:

 

::示例49—找到行内容是“han”的行(就一行),并显示他的上一行和下行。

@echo off
for /f "delims=" %%i in (Hanyeguxing.txt) do (
setlocal enabledelayedexpansion
if defined found set "Xing=%%i" & goto Ye
if "%%i"=="han" (set found=.) else set Gu=%%i
)
:Ye
echo 上一行:%Gu%
echo 下一行:%Xing%
pause

 

5,使用 findstr 或 find 来实现上例要求:

 

::示例50—找到行内容是“han”的行(就一行),并显示他的上一行和下行。

@echo off
for /f "delims=:" %%i in ('findstr /n "^han$" Hanyeguxing.txt') do set /a Han=%%i-2
for /f "skip=%Han% delims=" %%i in (Hanyeguxing.txt) do (

if not defined Han set "Xing=%%i" & goto Ye
if not defined Gu (set Gu=%%i) else set Han=
)
:Ye
echo 上一行:%Gu%
echo 下一行:%Xing%
pause

 

6,屏蔽筛选到的行和连续3行的内容:

 

::示例51—找到行内容是“han”的行,并不显示这一行以及连续三行的内容。

@echo off&setlocal enabledelayedexpansion
set Ye=0
for /f "tokens=1,* delims=:" %%i in ('findstr /n .* Hanyeguxing.txt') do (
if !Ye!==0 (
set Han=%%j
if "!Han:~,3!"=="han" (set Ye=3) else echo;%%j
) else set /a Ye-=1
)
pause

 

7,筛选显示前3行(含空行)的内容:

 

::示例51—显示前三行的内容。

@echo off
for /f "tokens=1,* delims=:" %%i in ('findstr /n .* Hanyeguxing.txt') do if %%i lss 4 echo;%%j
pause

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多