常用DOS命令之find和findstr的用法詳解


1.字符串查找:find
2.字符串查找增強:findstr

一.字符串查找:find

在文件中搜索字符串。
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] “string” [[drive:][path]filename[ …]]

/V        顯示所有未包含指定字符串的行。
/C        僅顯示包含字符串的行數。
/N        顯示行號。
/I        搜索字符串時忽略大小寫。
/OFF[LINE] 不要跳過具有脫機屬性集的文件。
“string”   指定要搜索的文字串,
[drive:][path]filename   指定要搜索的文件。

基本格式:find “要查找的字符串” 要查找的文件(不在當前目錄則需要給出完整路徑)

1
find "abc" d:\abc.txt
abc.txt中查找字符串abc的行。/I 搜索字符串時忽略大小寫。2
find /i "abc" d:\abc.txt
參數/i代表的是“Ignore”(忽略),也就是忽略大小寫。通過/I 參數可以不區分要查找的字符串“abc”的大小寫。/N 顯示行號。3
find /n "abc" d:\abc.txt
參數/n代表英語單詞“Number”(號碼).。通過/n參數我們可以查找到字符串"abc"所在的行號。/C 僅顯示包含字符串的行數。4
find /c "abc" d:\abc.txt
參數/c是英語單詞“Count”(計數)的縮寫。通過/c參數我們可以統計包含"abc"字符串的行數。/顯示所有未包含指定字符串的行。5
find /v "abc" d:\abc.txt
這個參數用於找出文件中不包含指定字符串的行。在這里表示查找不包含"abc"字符串的行。注意:find命令中要查找的字符串一字要用雙引號" "括起來。

二.字符串查找增強:findstr

在文件中尋找字符串。
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]
[/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
strings [[drive:][path]filename[ …]]

/B        在一行的開始配對模式。
/E        在一行的結尾配對模式。
/L        按字使用搜索字符串。
/R        將搜索字符串作為一般表達式使用。
/S        在當前目錄和所有子目錄中搜索
匹配文件。
/I         指定搜索不分大小寫。
/X        打印完全匹配的行。
/V        只打印不包含匹配的行。
/N        在匹配的每行前打印行數。
/M        如果文件含有匹配項,只打印其文件名。
/O        在每個匹配行前打印字符偏移量。
/P        忽略有不可打印字符的文件。
/OFF[LINE] 不跳過帶有脫機屬性集的文件。
/A:attr   指定有十六進位數字的顏色屬性。請見 “color /?”
/F:file   從指定文件讀文件列表 (/ 代表控制台)。
/C:string 使用指定字符串作為文字搜索字符串。
/G:file   從指定的文件獲得搜索字符串。 (/ 代表控制台)。
/D:dir    查找以分號為分隔符的目錄列表
strings   要查找的文字。
[drive:][path]filename  指定要查找的文件。

除非參數有 /C 前綴,請使用空格隔開搜索字符串。
例如: ‘FINDSTR “hello there” x.y’ 在文件 x.y 中尋找 “hello” 或
“there” 。  ‘FINDSTR /C:”hello there” x.y’ 在文件 x.y 尋找 “hello there”。

1.基本格式:findstr ” strings ” [drive:][path]filename

Strings  是要查找的內容。
[rive:][path]filename  指定要查找的文件,路徑可缺省,缺省情況下為當前目錄。

1
findstr "icq"123.txt123.txt中查找包含有“icq”這三個字符串的行。/指定搜索不分大小寫。2
findstr /i "MSN"123.txt123.txt中查找包含有“MSN”這三個字符的行,且不區分大小寫。★/R 將搜索字符串作為正則表達式使用。參數/R 強調以正則表達式規則來解讀字符串。R -Right右即為正。我們都說右手是正手,因此引申為右為正,左為反。3
findstr /r "icq msn"123.txt123.txt中查找包含有icq”或“msn”的行,查找的多個字符串間用空格隔格開。


 /S 在當前目錄和所有子目錄中搜索。4
findstr /s /i "MSN"*.txt
在當前目錄和所有子目錄中的txt文件中搜索字符串"MSN"(不區分字母大小寫)。/C:string使用指定字符串作為文字搜索字符串。5
findstr /c:"icq msn"123.txt123.txt中查找包含有icq msn”這幾個字符的行。注意,這里“icq msn”是一整體的。此參數多用於查找含有空格的字符串。★在使用 findstr "我 你 他" test.txt 的時候,並不能查找到內容,但是,加上開關/i 或者/r 之后就正確無誤了,可能是在查找多個純中文字符串的時候的一個bug吧;單個的純中文字符串沒有任何問題。

2.findstr 命令中正則表達式的用法規則

一般表達式的快速參考:
.        通配符: 任何字符
*        重復: 以前字符或類別出現零或零以上次數
^        行位置: 行的開始
$        行位置: 行的終點
[class]  字符類別: 任何在字符集中的字符
[^class] 補字符類別: 任何不在字符集中的字符
[x-y]    范圍: 在指定范圍內的任何字符
\x       Escape: 元字符 x 的文字用法
\<xyz    字位置: 字的開始
xyz\>    字位置: 字的結束

● 通配符和重復符規則,即 . 和 *
通配符,即一個句點,代表任何一個字符,而且只能是一個,包括字母、數字、半角符號還有空格。
重復符,即型號* 代表前面字母的出現次數(出現次數從0到多次,0表示沒有)。

findstr . 123.txt 或 findstr “.” 123.txt
在文件123.txt中查找任意字符,不包括空行。

6
findstr .*2.txt findstr ".*"2.txt在文件123.txt中查找任意字符,包括空行。7
findstr ac*123.txt 
在文件123.txt中查找出現一個“a”字符串,以及a后面出現過0次或者任意次c的字符行。如:
a 
ac
acc
addc
等都匹配。8
findstr ak5*123.txt 
在文件123.txt中查找出現一個“ak”字符串,以及ak后面出現過0次或者任意次5的字符行。如:
ak
ak5
akbbb
ak125
ak555
等都匹配。●行首、行尾符規則,即^ $

9
findstr "^step"123.txt在文件123.txt中查找行首為step字符串的行。如:
stepkdka
step 456這兩行都匹配的。10
findstr "step$"123.txt在文件123.txt中查找行尾為step字符串的行。如:123 dstep
123step這兩行也匹配的。11
findstr "^step$"123.txt在文件123.txt中查找行首為step,且行尾也為step的行,即step獨自一行。

● 字符集規則,即[class]
①表示含有集里的任意一個字符的即匹配。
②該字符集里的元素可以是字母和數字和一般的半角字符,如:}{ ,.][等,但雙引號”不被識別。不能是漢字, 漢字
不被正確解釋(漢字不是ASCII碼)。
如果在字符集內插入通配符和重復符號,即”[.*]”將會把. 和 *視為普通字符,沒有通配和重復的含義。

12
findstr "[0-9]"123.txt在文件123.txt中查找數字09的任意之一的行。如:4kkb1 lkka cc
這兩行都匹配。13
findstr "[a-zA-Z]"123.txt在文件123.txt中查找包括任意字母行。14
findstr "[abcezy]"2.txt在文件123.txt中查找包括a b c e z y其中任意一字母的行。15
findstr "[a-fl-z]"2.txt在文件123.txt中查找小寫字符af lz的任意一字母的行,但不包含g h I j k這幾個字母。16
findstr "M[abc][123]Y"2.txt在文件123.txt中查找可以匹配Ma1Y,Mb1Y,Mc1Y;Ma2Y,Mb2Y,Mc2Y;Ma3Y,Mb3Y,Mc3Y的行。

● 減法規則,即[^class]

17
findstr "[^0-9]"123.txt如果是純數字的行便過濾掉,例如2323423423這樣的字符串被過濾,345hh888這樣的形式則過濾不了。注意,純數字的行不能有空格,不論行首行尾或者是行中都不能有空格,否則過濾失敗!18
findstr "[^a-z]"123.txt如果是純字母的行便過濾掉,例如 sdlfjlkjlksjdklfjlskdf 這樣的字符將被過濾,如果是sdfksjdkf99999這樣的形式則過濾不了。注意,純字母的行不能有空格,不論行首行尾或者是行中都不能有空格,否則過濾失敗!19
findstr "[^add]"123.txt過濾僅含有由a d d三個字母組成的純字母字符串的行。 
如:
a
ad
ddaadd
dd
這些行都會被過濾。注意,僅含有由a d d三個字母組成的純字母字符串的行不能有空格,不論行首行尾或者是行中都不能有空格,否則過濾失敗!20
findstr "[^echo]"123.txt過濾僅含有由e  c  h  o 四個字母組成的純字母字符串的行。 
如:
e
c
ec
cho
chooo
這些行都會被過濾。

●單詞前綴后綴定位規則,即\<xyz和xyz\>

該xyz可以是英文單詞或數字,但不適用於漢字。符號 \ 理解為轉義符,化解小於號和大於號的重定向命令含義。
該規則是匹配類似單個英文單詞的。

21
findstr "\<echo"123.txt所有含有以echo為前綴的字符串的行,都匹配。如:
echo:kkk a add 
jjkk echo
這兩行都匹配。(思考:為什么:echo也匹配?)22
findstr "echo\>"123.txt所有含有以echo為后綴的字符串的行,都匹配。如:
qq bbecho 這一行也匹配。 
(思考:為什么kkkk echo:也匹配?)23
findstr "\<end\>123.txt
這里是用來精確查找單詞。查找單詞end的行,
注意:
ended
cdkend
bcd-end-jjkk
這類詞都不匹配。

(思考:為什么end echo和end也匹配?因為\<xyz\>格式要查找的是單個英文單詞。)

● 轉義符 \

把表達式中的特殊字符(元字符)轉化為普通字符。常見寫法:
\.
\*
\\
\[
\]??
\-

24
findstr "\.abc"123.txt在文件123.txt中查找可以匹配“.abc”字符串的行,這里\。是把。給轉義了。25
findstr "1\\"123.txtfindstr "1\\\\"123.txt在文件123.txt中查找可以匹配“1\”字符串的行,這里\\是把\給轉義了。

★要查找的字符串含有\時,可以用\\把\給轉義;或者把\變成\\\\。如果目標字符串的\后面還有內容,則搜索字符
串\除了要變成\\(本身的轉義要求),還可以在它后面再加一個字符,如\\.

 

出處:https://www.zhangqiongjie.com/695.html

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

Findstr 不能搜索 UTF-8 編碼文件怎么辦

方法一

用 grep 代替 findstr 命令來執行查找

 

方法二

如果可以的話,把bat文件和待查找到文件的編碼格式,保存為ANSI編碼格式

如果文件中包含unicode的字符,例如:Copyright ©  等,就無法保存ANSI格式的文件了

 

方法三

使用命令 chcp 修改 cmd 命令行,支持 utf-8 格式的文本顯示,這個命令是用來顯示當前活動代碼頁編號的

 如:chcp 65001

 

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

總結:
findstr和find 查找漢字時只能在936代碼下使用,且查找的文件須為中文編碼,utf-8格式會導致查找不到

一.區別

find 無正則
findstr 默認正則(推薦)

二.例子

test1.bat文件:

chcp 65001>nul
echo "你好 世界" |find "你好"
echo "你好 世界" |findstr "你好"
pause

無任何輸出

 

test2.bat文件:

chcp 936>nul
echo "你好 世界" |find "你好"
echo "你好 世界" |findstr "你好"
pause

輸出:
“你好 世界”
“你好 世界”

 

出處:https://blog.csdn.net/u012787710/article/details/96286295

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

CMD命令窗口中文亂碼問題的解決

解決命令行的亂碼以及編碼的問題
命令 chcp
功能:
顯示或設置活動代碼頁編號
  CHCP [nnn]
  nnn 指定代碼頁編號。
  不加參數鍵入 CHCP 顯示活動代碼頁編號。
  nnn指定一已有的系統字符集,該字符集在CONFIG.SYS文件中由COUNTRY命令定義。
  在DOS下可以通過mode命令來設置代碼頁。
  選定代碼頁: MODE CON[:] CP SELECT=yyy
  代碼頁狀態: MODE CON[:] CP [/STATUS]
  按Windows+R組合鍵,然后輸入cmd或者command打開命令提示符。
  比如輸入:mode con cp select=936,則表示顯示簡體中文。如果輸入mode con cp select=437,則表示顯示MS-DOS 美國英語,而中文顯示將會是?。
  MS-DOS為以下國家和語言提供字符集:
  代碼頁描述
  1258 越南語
  1257 波羅的語
  1256 阿拉伯語
  1255 希伯來語
  1254 土耳其語
  1253 希臘語
  1252 拉丁 1 字符 (ANSI)
  1251 西里爾語
  1250 中歐語言
  950 繁體中文
  949 朝鮮語
  936 簡體中文(默認)
  932 日語
  874 泰國語
  850 多語種 (MS-DOS Latin1)
  437 MS-DOS 美國英語
//補充
dos指令:
chcp 65001 就是換成UTF-8代碼頁
chcp 936 可以換回默認的GBK
chcp 437 是美國英語
如何在DOS窗口中顯示UTF-8字符
在中文Windows系統中,如果一個文本文件是UTF-8編碼的,那么在CMD.exe命令行窗口(所謂的DOS窗口)中不能正確顯示文件中的內容。在默認情況下,命令行窗口中使用的代碼頁是中文或者美國的,即編碼是中文字符集或者西文字符集。
如果想正確顯示UTF-8字符,可以按照以下步驟操作:
1、打開CMD.exe命令行窗口
2、通過 chcp命令改變代碼頁,UTF-8的代碼頁為65001
chcp 65001
執行該操作后,代碼頁就被變成UTF-8了。但是,在窗口中仍舊不能正確顯示UTF-8字符。
3、修改窗口屬性,改變字體
在命令行標題欄上點擊右鍵,選擇"屬性"->“字體”,將字體修改為True Type字體"Lucida Console",然后點擊確定將屬性應用到當前窗口。
這時使用type命令就可以顯示UTF-8文本文件的內容了:
type filename.txt
4、通過以上操作並不能完全解決問題,因為顯示出來的內容有可能不完全。可以先最小化,然后最大化命令行窗口,文件的內容就完整的顯示出來了

 

 出處:https://blog.csdn.net/river131/article/details/97242737


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM