首先,計算出現在文本文件中的行數:
for /F %%C in ('^< "examplefile.txt" find /C /V ""') do set "COUNT=%%C"
然後確定有多少行被跳過(所有,但最後10行,例如):
if %COUNT% GTR 10 (set /A "SKIP=COUNT-10") else (set "SKIP=0")
最後,使用more
command實際跳過線:
more +%SKIP% "examplefile.txt" | > nul findstr /L /I "Example Words" && (
rem Found
goto next
) || (
rem Not Found
goto home
)
使用findstr
而不是find
指定多個SPACE - 分隔的搜索字符串或單詞(如Example
和Words
這裏)。使用/I
選項執行不區分大小寫的搜索。
請注意,more
需要用戶在輸入文件包含65535或更多行時輸入。它將空間轉換爲TAB,但這不應該改變任何內容,因爲您對搜索沒有興趣,因爲您只搜索單詞。
下面是一個更復雜的和效率低的方法依賴於for /F
loop,也使用可變COUNT
如上得到。它需要skip
選項for /F
,這是建立如下:
set /A "SKIP=COUNT-10"
if %SKIP% GTR 0 (set "SKIP=skip=%SKIP%") else (set "SKIP=")
於是就有了上述for /F
循環:
for /F "%SKIP% delims=" %%L in ("examplefile.txt") do (
echo(%%L| > nul findstr /L /I "Example Words" && (
rem Found
goto next
)
)
ren Not Found
goto home
每一道線條都是單獨搜索的循環;只要遇到匹配,就執行goto next
; goto
打破了循環上下文,因此for /F
不再執行其正文內的任何命令。
注意for /F
會忽略空行,並且還會以默認分號(;
)開頭。一些特殊的字符(^
,&
,(
,)
,"
,<
,>
,|
)可能會導致與在管(|
)的echo
命令麻煩。
是最後的** 10 **還是最後的** 2 **行?請澄清! – aschipfl
@aschipfl:存在10種類型的人:那些知道二元系統的人和那些不知道... – Aacini
Hehe,@Aacini ...我希望OP能澄清... – aschipfl