1. 程式人生 > >常用批處理命令總結3之Find和FindStr

常用批處理命令總結3之Find和FindStr

ttr 計算 例如 ber 文件名 忽略大小寫 cap 應該 dst

@echo off
findstr /V "[4-4]" all210.txt > no4.txt
pause
::註釋 /n是顯示出來第幾行!查不帶4的可註冊的域名


find 作用:從文件中收索字符串

格式:find 參數 "字符串" 路徑\文件名

參數: /V 顯示所有未包含指定字符串的行。

/C 僅顯示包含字符串的行數。

/N 顯示行號。

/I 搜索字符串時忽略大小寫。

/OFF[LINE] 不要跳過具有脫機屬性集的文件。

當文件中包含要查找的字符串時,將返回這個字符串所在位置的整行內容。默認情況下是區分大小寫的,若想要

不區分大小寫就是用參數 /i 有時候,我們的需求並不是為了查找到某個字符串,而是要檢測哪些行不含有特定的

字符串,這個時候,可以使用開關/v,用法為:find /v "Abc" test.txt,它表示查找那些不含字符串Abc的行(Abc要

區分大小寫),如果不區分abc的大小寫,那麽,應該寫成 find /i /v "Abc" test.txt。還有一點是find 支持查找通配

符文件。如 find "1" *.txt。

findstr 是find的擴展,功能更強大

格式:findstr 參數 字符串 路徑\文件名

參數: /B 在一行的開始配對模式。 (就是指以字符串開頭,begin 這樣就方便了記憶)

/E 在一行的結尾配對模式。(就是指以字符串結尾,end 這樣就方便記憶)

/L 按字使用搜索字符串。就是將後面的""裏的當成一個字符

/R 將搜索字符串作為一般表達式使用。

/S 在當前目錄和所有子目錄中搜索匹配文件。

/I 指定搜索不分大小寫。(英文:ignore 忽略)

/X 打印完全匹配的行。/x 是指完全匹配,就是說整行匹配,而不是含有關鍵字.

/V 只打印不包含匹配的行。(就是找出不包含字符串的)

/N 在匹配的每行前打印行數。(就是在輸出行的前面加上原文件中的行數,英文:number)

顯示的結果中冒號(:)是英文格式下的,在用for提取的時候需要註意!

/M 如果文件含有匹配項,只打印其文件名。(指定文件中輸出含有字符串的文件名)

/O 在每個匹配行前打印字符偏移量。o開關的作用是告訴你每行第一個字符前的位置是該文件中的第幾個字節

計算時別忘了文本中不可見的回車符合換行符將占兩字節(某些文本中只占一字節)。還有空格鍵一個字符。

肯定聽不懂。看例子:1.txt文件內容: 就三行三個c沒有空格。輸入:findstr /o c 1.txt 結果是:

c 0:c

c 3:c

c 6:c

怎麽計算:第一行的c前沒有字符所以是0.第二行的c前一行只有一個c算一個字符由於是第二行所以算一個回車

2個字符就是:1+2=3同理第三個c前有2個字符和2個回車:1*2+2*2=6.。

/P 忽略有不可打印字符的文件。(我不清楚,個人無法解釋)

/C:string 使用指定字符串作為文字搜索字符串。

如:findstr /c:"a b" 1.txt 就會找出含"a b"的行並輸出來(註意a和b中間有空格)

如果不用參數/c:findstr "a b" 1.txt 就會輸出含有字母 a 或 b 的行。

/G:file 從指定的文件獲得搜索字符串。 (/ 代表控制臺)。

如:findstr /g:2.txt 1.txt 就是把1.txt中含有2.txt中任一行內容的行輸出來。

上面的有點像:@echo off

for /f "delims=" %%a in (‘type 2.txt‘) do (

findstr "%%a" 1.txt

echo.)

pause

(以上是自己試出來的,不保證正確)

/A:attr 指定有十六進位數字的顏色屬性。請見 "color /?"(使用這個可以在dos上面搞出不同顏色的字,自己想想)

/F:file 從指定文件讀文件列表 (/ 代表控制臺)。

/D:dir 查找以分號為分隔符的目錄列表

/OFF[LINE] 不跳過帶有脫機屬性集的文件。

除非參數有 /C 前綴,請使用空格隔開搜索字符串。

例如: FINDSTR "hello there" x.y 在文件 x.y 中尋找 "hello"或"there" 。 FINDSTR /C:"hello there" x.y 文

件 x.y 尋找"hello there"。

一般表達式的快速參考:

. 通配符: 任何字符

* 重復: 以前字符或類別出現零或零以上次數

^ 行位置: 行的開始

$ 行位置: 行的終點

[class] 字符類別: 任何在字符集中的字符

[^class] 補字符類別: 任何不在字符集中的字符

[x-y] 範圍: 在指定範圍內的任何字符

\x Escape: 元字符 x 的文字用法

\<xyz 字位置: 字的開始

xyz\> 字位置: 字的結束

<和\>是單詞錨定 ^是行首 $是行尾

註意的是:別把^,$和\<,\>弄混了一個是行一個是字。行開始與結束沒什麽好說的。而字的開始和結束就不一樣了,例如:

1.txt裏兩行為"abcd" 和 "abcd e"用命令findstr "cd\>" 1.txt 兩行都會出現,只要是連在一起(沒被空格開)的

並以cd結尾的(不 要求是行尾)都滿足。相當於文本中出現英語中以cd結尾的的單詞了的行都會輸出來。

舉一些例子(來自網絡):

1.findstr . 2.txt 或 findstr "." 2.txt 2.findstr .* 2.txt 或 findstr ".*" 2.txt

從文件2.txt中查找任意字符,不包括空字符或空行 從文件2.txt中查找任意字符包括空行和空字符

==================== ====================

3.findstr "[0-9]" 2.txt 4.findstr "[a-zA-Z]" 2.txt

從文件2.txt中查找包括數字0-9的字符串或行 從文件2.txt中查找包括任意字符的字符串或行

==================== ====================

5.findstr "[abcezy]" 2.txt 6.findstr "[a-fl-z]" 2.txt

從文件2.txt中查找包括a b c e z y字母的字符串或行 從文件2.txt中查找小寫字符a-f l-z的字符串,但不包含g h I j k這幾個字母。

==================== ====================

7.findstr "M[abc][hig]Y" 2.txt 8. ^和$符號的應用

從文件2.txt中可以匹配 MahY , MbiY, MahY等….. ^ 表示行首,"^step"僅匹配 "step hello world"中的第一個單詞

$ 表示行尾,"step$"僅匹配 "hello world step"中最後一個單詞

==================== ====================

9.finstr "[^0-9]" 2.txt

如果是純數字的字符串或者行便過濾掉,例如2323423423 這樣的字符串,如果是345hh888這樣的形式就不成了。

====================

10.findstr "[^a-z]" 2.txt

同上,如果是純字母的字符串或者行便過濾掉,例如 sdlfjlkjlksjdklfjlskdf這樣的字符,如果是sdfksjdkf99999這樣的形式,摻雜著數字就不成了

====================

11.*號的作用

前面已經說過了 ".*"表示搜索的條件是任意字符,*號在正則表達式中的作用不是任何字符,而是表示左側字符或者表達式的重復次數,*號表示重復的次數為零次或者多次。

====================

12.findstr "^[0-9]*$" 2.txt

這個是匹配找到的純數字,例如 234234234234,如果是2133234kkjl234就被過濾掉了。

Findstr "^[a-z]*$" 2.txt

這個是匹配找到的純字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被過濾掉了

如 果在搜索條件裏沒有*號,也就是說不重復左側的搜索條件,也就是[0-9] [a-z]那只能匹配字符串的第一個字符也只有這一個字符,因為有行首和行尾的限制,"^[0-9]$"第一個字符如果是數字就匹配,如果不是就過濾掉, 如果字符串是 9 就匹配,如果是98或者9j之類的就不可以了。

=====================

13. "\<…\>"這個表達式的作用

這個表示精確查找一個字符串,\<sss 表示字的開始位置,sss\>表示字的結束位置

echo hello world computer|findstr "\<computer\>"這樣的形式

echo hello worldcomputer|findstr "\<computer\>" 這樣的形式就不成了,他要找的是 "computer"這個字符串,所以不可以。

echo hello worldcomputer|findstr ".*computer\>"這樣就可以匹配了

14.吧1.txt文檔中超過10個字符的行輸出到2.txt

@findstr .......... 1.txt>2.txt

感覺好像2.txt裏是少於10個字符的行,可是實際卻是超過10個字符的行,包括10個字符。

find比findstr更強的地方:

 1、統計含指定字符串的總行數。find /c "abc" test.txt可以統計test.txt中含有字符串abc的總行數,而findstr則沒有直接提供該功能,需要配合for語句才能實現;

  2、find可以讀取Unicode格式的文本,而findstr則不行;

  3、find可以過濾某些特殊字符,而findstr則不行,比如,我們在使用fsutil fsinfo drives語句查詢磁盤分區的時候,如果想讓盤符分行顯示而不是顯示在同一行上的時候(這在用for語句提取盤符的時候很有用),find可以大顯身手,而findstr只能幹瞪眼了,具體語句為: 代碼: fsutil fsinfo drives|find /v ""

常用批處理命令總結3之Find和FindStr