在文件中尋找字符串。
復(fù)制代碼 代碼如下:
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
[/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
strings [[drive:][path]filename[ ...]]
/B 在一行的開始配對(duì)模式。
/E 在一行的結(jié)尾配對(duì)模式。
/L 按字使用搜索字符串。
/R 將搜索字符串作為正則表達(dá)式使用。
/S 在當(dāng)前目錄和所有子目錄中搜索匹配文件。
/I 指定搜索不分大小寫。
/X 打印完全匹配的行。
/V 只打印不包含匹配的行。
/N 在匹配的每行前打印行數(shù)。
/M 如果文件含有匹配項(xiàng),只打印其文件名。
/O 在每個(gè)匹配行前打印字符偏移量。
/P 忽略有不可打印字符的文件。
/OFF[LINE] 不跳過帶有脫機(jī)屬性集的文件。
/A:attr 指定有十六進(jìn)位數(shù)字的顏色屬性。請(qǐng)見 "color /?"
/F:file 從指定文件讀文件列表 (/ 代表控制臺(tái))。
/C:string 使用指定字符串作為文字搜索字符串。
/G:file 從指定的文件獲得搜索字符串。 (/ 代表控制臺(tái))。
/D:dir 查找以分號(hào)為分隔符的目錄列表
strings 要查找的文字。
[drive:][path]filename
指定要查找的文件。
除非參數(shù)有 /C 前綴,請(qǐng)使用空格隔開搜索字符串。
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中尋找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y 尋找
"hello there"。
正則表達(dá)式的快速參考:
. 通配符: 任何字符
* 重復(fù): 以前字符或類出現(xiàn)零或零以上次數(shù)
^ 行位置: 行的開始
$ 行位置: 行的終點(diǎn)
[class] 字符類: 任何在字符集中的字符
[^class] 補(bǔ)字符類: 任何不在字符集中的字符
[x-y] 范圍: 在指定范圍內(nèi)的任何字符
\x Escape: 元字符 x 的文字用法
\xyz 字位置: 字的開始
xyz\&; 字位置: 字的結(jié)束
有關(guān) FINDSTR 常見表達(dá)法的詳細(xì)情況,請(qǐng)見聯(lián)機(jī)命令參考。
這則幫助信息中,我將“一般表達(dá)式”,全部替換成了“正則表達(dá)式”(一切都是機(jī)器翻譯惹的禍)。
命令概括:
findstr,全英文find string,意為“查找字符串”;
/b,全英文begin,意為“開始”;
/e,全英文end,意為“末端”;
/l,literally,意為“照字面地”;引申為“去正則表達(dá)式”。
/r,regular,意為“有規(guī)律的”;引申為“正則表達(dá)式”。
/s,subdirectory,意為“子目錄”;
/i,ignore,意為“忽略”;引申為“忽略大小寫”;
/x,exactly,意為“恰好地”;引申為“完全匹配”;(一開始意為不是這個(gè)單詞,不過HAT確實(shí)高明——之所以以e為縮寫,是因?yàn)榍懊嬗辛薳nd的縮寫,所以以第二個(gè)字母x為縮寫)。
/v,invert,意為“反轉(zhuǎn)、使顛倒”(感謝doupip的單詞提供);
/n,全英文number,意為“數(shù)字”;引申為“行號(hào)”;
/m,merely,意為“只是”;
/o,offset,意為“偏移”;
/p,print,意為“打印”;
/off[line],意為“脫機(jī)文件”;
/a,attribute,意為“屬性”;
/f,file,意為“文件”;
/c,case,意為“把幾個(gè)字加起來”;引申為“全部字匹配”;
/g,get,意為“獲得”;
/d,directory,意為“目錄”;
class,類。
感謝HAT的單詞提供。
感謝weichengxiehou。
參數(shù)詳解部分13-14節(jié)都是從weichengxiehou的帖子里復(fù)制來的(既然有現(xiàn)成了,省心多少),原帖地址。
參數(shù)詳解:
學(xué)習(xí)findstr需要大量的實(shí)踐體會(huì),所以需要新建一些txt文本以供測試。
a.txt的內(nèi)容(a.txt的內(nèi)容在后面會(huì)多次修改,請(qǐng)注意!):
復(fù)制代碼 代碼如下:
Hello World
Hello Boy
hello ,good man.
goodbye!
1.最簡單的應(yīng)用:在指定文本中查找指定字符串
代碼:
復(fù)制代碼 代碼如下:
findstr "hello" a.txt
結(jié)果:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr "hello" a.txt
hello ,good man.
代碼:
復(fù)制代碼 代碼如下:
findstr "Hello" a.txt
結(jié)果:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr "Hello" a.txt
Hello World
Hello Boy
這里可以看出,
findstr默認(rèn)是區(qū)分大小寫的(跟find命令一樣)——找hello就不會(huì)出現(xiàn)Hello,反之亦然。
怎么讓其不區(qū)分大小寫呢?
用/i參數(shù)!
例如:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /i "Hello" a.txt
Hello World
Hello Boy
hello ,good man.
2.顯示要查找的字符具體在文本哪一行
代碼:C:\Users\helloworld\Desktop>findstr /n /i "hello" a.txt
復(fù)制代碼效果:
復(fù)制代碼 代碼如下:
1:Hello World
2:Hello Boy
3:hello ,good man.
顯示的結(jié)果中冒號(hào)(:)是英文格式下的,在用for提取的時(shí)候需要注意!
這里可以對(duì)比一下find命令的/n參數(shù):
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>find /n "hello" a.txt
效果:---------- A.TXT
[3]hello ,good man.
復(fù)制代碼冒號(hào)(:)和中括號(hào)([]),這就是差別,編寫代碼的時(shí)候一定要注意。
3.查找包含了指定字符的文本
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /m /i "hello" *.txt
效果:
復(fù)制代碼 代碼如下:
1.txt
a.txt
1.txt中的類容如下:除非參數(shù)有 /C 前綴,請(qǐng)使用空格隔開搜索字符串。
例如:
復(fù)制代碼 代碼如下:
'FINDSTR "hello there" x.y' 在文件 x.y 中尋找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y 尋找
"hello there"。
[code]
由于加上了/m參數(shù),所以只列出包含指定字符的文件名。
4.查找以指定字符開始或結(jié)尾的文本行
這個(gè)功能和前面介紹的最大不同就在于涉及到了“元字符”,如果你不明白什么是“元字符”,那也不用擔(dān)心學(xué)不好這一節(jié),這就好像不明白“water”是什么,也不會(huì)影響喝水。
a.txt內(nèi)容:
[code]
good hello
你好 hello world
Hello World
Hello Boy
hello ,good man.
goodbye!
如何查找以hello(忽略大小寫)開始的行?
兩種方法:
①./b參數(shù)
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /b /i "hello" a.txt
效果:
復(fù)制代碼 代碼如下:
Hello World
Hello Boy
hello ,good man.
good hello 和 你好 hello world,這兩行都沒有顯示出來,因?yàn)閔ello不在行的開始處。
②.^符
這里的^可不是轉(zhuǎn)義符,而是正則表達(dá)式中的“匹配行開始的位置”。
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /i "^hello" a.txt
效果:
復(fù)制代碼 代碼如下:
Hello World
Hello Boy
hello ,good man.
學(xué)完了以查找指定字符開始的行,下面學(xué)習(xí)查找以指定字符結(jié)尾的行。
如何查找以hello(忽略大小寫)結(jié)尾的行?
同樣有兩種方法:
①./e參數(shù)
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /e /i "hello" a.txt
結(jié)果:
復(fù)制代碼 代碼如下:
good hello
只顯示了“good hello”,因?yàn)槠渌须m然有“hello”,但是他們都沒有以“hello”結(jié)尾。
②.$符
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /i "hello$" a.txt
結(jié)果:good hello
到此,我們已經(jīng)學(xué)習(xí)了兩個(gè)正則表達(dá)式的元字符:^和$(分別和他們功能相對(duì)應(yīng)的有/b、/e參數(shù))。
5.查找與指定字符完全匹配的行
首先修改a.txt的內(nèi)容:
復(fù)制代碼 代碼如下:
hello
hello hello
good hello
你好 hello world
Hello World
Hello Boy
hello ,good man.
goodbye!
懂得舉一反三的的童鞋可能會(huì)試著嘗試以下代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /n /i "^hello$" a.txt
結(jié)果讓你倍感欣喜:1:hello
其實(shí)除了這一種方法外,findstr命令還提供了/x參數(shù)用來查找完全匹配的行。
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /n /i /x "hello" a.txt
結(jié)果:
復(fù)制代碼 代碼如下:
1:hello
6.關(guān)閉正則表達(dá)式會(huì)怎么樣?
我們可以人為地將findstr分為兩種模式,“正則表達(dá)式模式”和“普通字符串模式”。
findstr默認(rèn)為“正則表達(dá)式模式”,加上/r參數(shù)也是“正則表達(dá)式模式”(換言之,/r參數(shù)有點(diǎn)多余)。
加上/l參數(shù)后,findstr轉(zhuǎn)換為“普通字符串模式”(其實(shí)find就是這種模式、且只有這種模式)。
“普通字符串模式”下,以同樣的代碼,看看結(jié)果怎樣?
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /li "^hello" a.txt
結(jié)果什么都沒顯示出來。
以hello開頭的行明明有以下這些,為什么沒顯示出來呢?
復(fù)制代碼 代碼如下:
hello hello
Hello World
Hello Boy
hello ,good man.
因?yàn)?,?dāng)你使用“普通字符串模式”,findstr不會(huì)把^當(dāng)做是正則表達(dá)式的元字符,而只是把其當(dāng)做普通字符^,也就是說它此時(shí)已經(jīng)不具備“表示行首”的功能,變成了和h之類字符一樣的普通民眾,再也沒“特權(quán)”。
改變a.txt的內(nèi)容:^hello
復(fù)制代碼 代碼如下:
hello
hello hello
good hello
你好 hello world
Hello World
Hello Boy
hello ,good man.
goodbye!
再次運(yùn)行代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /nli "^hello" a.txt
結(jié)果:
復(fù)制代碼 代碼如下:
1:^hello
7.查找不包含指定字符的行
如果比較一下find和findstr命令就會(huì)發(fā)現(xiàn),他們都具有/v,/n,/i,/off[line]參數(shù),而且功能都是一摸一樣的,這里說的就是/v參數(shù)。
查找不包含hello的行。
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /vni "hello" a.txt
結(jié)果:
復(fù)制代碼 代碼如下:
9:goodbye!
8.如何查找當(dāng)前目錄及子目錄下文件內(nèi)容中包含某字符串的文件名?
在寫這篇教程的時(shí)候,偶然看到有批友問了這個(gè)問題,問題地址:http://bbs.bathome.net/viewthread.php?tid=14727
代碼:
復(fù)制代碼 代碼如下:
findstr /ms "專業(yè)" *.txt
效果:
找出當(dāng)前目錄及子目錄下文件內(nèi)容中包含“專業(yè)”的文本文件,并只顯示其文件名。
9.用文本制定要查找的文件 And 用文本制定要查找的字符串
用文本制定要查找的文件
新建一個(gè)file.txt,內(nèi)容如下(這個(gè)文本中指定findstr要查找的文本的路徑):
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop\1.txt
C:\Users\helloworld\Desktop\a.txt
C:\Users\helloworld\Desktop\clip.txt
C:\Users\helloworld\Desktop\CrLf 批處理筆記.txt
C:\Users\helloworld\Desktop\file.txt
C:\Users\helloworld\Desktop\MyRarHelp.txt
C:\Users\helloworld\Desktop\test.txt
C:\Users\helloworld\Desktop\紅樓.txt
C:\Users\helloworld\Desktop\520\新建文本文檔.txt
C:\Users\helloworld\Desktop\520\12\hello_ world.txt
C:\Users\helloworld\Desktop\編程\help.txt
C:\Users\helloworld\Desktop\編程\win7 help比xp help多出來的命令.txt
C:\Users\helloworld\Desktop\編程\wmic.txt
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /f:file.txt /im "hello"
效果:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop\1.txt
C:\Users\helloworld\Desktop\a.txt
C:\Users\helloworld\Desktop\CrLf 批處理筆記.txt
C:\Users\helloworld\Desktop\file.txt
C:\Users\helloworld\Desktop\test.txt
用文本制定要查找的字符串
新建一個(gè)string.txt,內(nèi)容如下(這個(gè)文本中指定findstr要查找的字符串):
復(fù)制代碼 代碼如下:
^hello
world
a.txt
復(fù)制代碼 代碼如下:
^hello
hello
hello hello
good hello
你好 hello
Hello World
Hello Boy
hello ,good man.
goodbye!
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /ig:string.txt a.txt
效果:
復(fù)制代碼 代碼如下:
hello
hello hello
Hello World
Hello Boy
hello ,good man.
被忽略的行
復(fù)制代碼 代碼如下:
^hello
good hello
你好 hello
goodbye!
從被忽略的“^hello”可以看出,在不加/l參數(shù)的前提下,用/g指定的搜索字符串中如果含有“元字符”,則作為正則表達(dá)式使用,而不是作為普通表達(dá)式。
10.搜索一個(gè)完全匹配的句子
其實(shí)findstr自帶的幫助中就有個(gè)很好的例子:
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中尋找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y 尋找
"hello there"。
可以以這個(gè)例子來做個(gè)測試。
復(fù)制代碼 代碼如下:
a.txthello there
hellothere
hello
there
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /ic:"hello there" a.txt
結(jié)果:
復(fù)制代碼 代碼如下:
hello there
這就是句子的完全匹配了。
11.搜索一個(gè)完全匹配的詞。
這里也涉及到了兩個(gè)元字符:\,\&;。
先試看一個(gè)例子。
a.txt
復(fù)制代碼 代碼如下:
far there
farthere
there
far
farm
farmer
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr "far" a.txt
結(jié)果:
復(fù)制代碼 代碼如下:
far there
farthere
far
farm
farmer
我的本意是要查找含有“far”這個(gè)單詞的行,但是farthere、farm、farmer卻顯示出來了,這不是我想要的結(jié)果。
如果只要求顯示含有“far”這個(gè)單詞的行,該怎么寫呢?
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr "\far\&;" a.txt
結(jié)果:
復(fù)制代碼 代碼如下:
far there
far
12.指定要查找的目錄
/d參數(shù)我一直把它和/f、/g歸為一類,但其實(shí)二者截然不同,/f、/g是用文本文件制定要查找的文件、字符串,而/d是直接書寫目錄名到命令中。
代碼:
復(fù)制代碼 代碼如下:
C:\Users\helloworld\Desktop>findstr /imd:520;編程; ".*" "*.txt"
結(jié)果:
復(fù)制代碼 代碼如下:
520:
hello.txt
編程:
help.txt
復(fù)制代碼 代碼如下:
win7 help比xp help多出來的命令.txt
wmic.txt
查找在520、編程目錄中所有包含任意字符的txt文件。
13.統(tǒng)計(jì)字符數(shù)
/o:在每行前打印字符偏移量,在找到的每行前打印該行首距離文件開頭的位置,也就是多少個(gè)字符,如test.txt中有如下內(nèi)容:
復(fù)制代碼 代碼如下:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
執(zhí)行命令:findstr /o .* test.txt
復(fù)制代碼::上一行中的.*為正則表達(dá)式的內(nèi)容,表示任意行,包含空行
結(jié)果如下:
復(fù)制代碼 代碼如下:
0:aaaaaaaaaa
12:aaaaaaaaaa
24:aaaaaaaaaa
36:aaaaaaaaaa
48:aaaaaaaaaa
注意每行末尾的回車換行符算兩個(gè)字符。
14.以指定顏色顯示文件名
/a:當(dāng)被搜索文件名中含有通配符*或?時(shí)對(duì)搜索結(jié)果的文件名部分指定顏色屬性,具體顏色值參見color幫助:
0 = 黑色 8 = 灰色
1 = 藍(lán)色 9 = 淡藍(lán)色
2 = 綠色 A = 淡綠色
3 = 淺綠色 B = 淡淺綠色
4 = 紅色 C = 淡紅色
5 = 紫色 D = 淡紫色
6 = 黃色 E = 淡黃色
7 = 白色 F = 亮白色
常用于彩色顯示,舉個(gè)簡單的例子,想要彩色顯示“批處理之家”怎么辦,假如當(dāng)前的color設(shè)置為27(背景綠色,字體白色),用藍(lán)色顯示“批處理之家”咋辦?::下一行的退格符可以在cmd的編輯模式下按ctrl+p后按退格鍵獲得>"批處理之家" set /p=nul
復(fù)制代碼 代碼如下:
>"批處理之家" set /p=nul
findstr /a:21 .* "批處理之家*"
pause
代碼中的退格符是為了讓顯示的內(nèi)容僅為"批處理之家",如果有其他內(nèi)容,在彩色顯示的"批處理之家"后還有一個(gè)冒號(hào)和其他內(nèi)容,退格符正好將冒號(hào)刪除。注意代碼中的通配符是必須的。
15.findstr中的元字符
16.未講解的內(nèi)容:/p,/off[line]
這兩個(gè)命令不明白是什么意思,因?yàn)椴恢朗裁词恰安豢纱蛴∽址?、“帶有脫機(jī)屬性集的文件”,望有識(shí)之士給予解答。