在檔案中尋找字串。
複製代碼 代碼如下: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 在一行的開始配對模式。
/E 在一行的結尾配對模式。
/L 按字使用搜尋字串。
/R 將搜尋字串作為Regex使用。
/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"。
Regex的快速參考:
. 萬用字元: 任何字元
* 重複: 以前字元或類出現零或零以上次數
^ 行位置: 行的開始
$ 行位置: 行的終點
[class] 字元類: 任何在字元集中的字元
[^class] 補字元類: 任何不在字元集中的字元
[x-y] 範圍: 在指定範圍內的任何字元
\x Escape: 元字元 x 的文字用法
\<xyz 字位置: 字的開始
xyz\> 字位置: 字的結束
有關 FINDSTR 常見表達法的詳細情況,請見聯機命令參考。
這則協助資訊中,我將“一般運算式”,全部替換成了“Regex”(一切都是機器翻譯惹的禍)。
命令概括:
findstr,全英文find string,意為“尋找字串”;
/b,全英文begin,意為“開始”;
/e,全英文end,意為“末端”;
/l,literally,意為“照字面地”;引申為“去Regex”。
/r,regular,意為“有規律的”;引申為“Regex”。
/s,subdirectory,意為“子目錄”;
/i,ignore,意為“忽略”;引申為“忽略大小寫”;
/x,exactly,意為“恰好地”;引申為“完全符合”;(一開始意為不是這個單詞,不過HAT確實高明——之所以以e為縮寫,是因為前面有了end的縮寫,所以以第二個字母x為縮寫)。
/v,invert,意為“反轉、使顛倒”(感謝doupip的單詞提供);
/n,全英文number,意為“數字”;引申為“行號”;
/m,merely,意為“只是”;
/o,offset,意為“位移”;
/p,print,意為“列印”;
/off[line],意為“離線檔案”;
/a,attribute,意為“屬性”;
/f,file,意為“檔案”;
/c,case,意為“把幾個字加起來”;引申為“全部字匹配”;
/g,get,意為“獲得”;
/d,directory,意為“目錄”;
class,類。
感謝HAT的單詞提供。
感謝weichengxiehou。
參數詳解部分13-14節都是從weichengxiehou的文章裡複製來的(既然有現成了,省心多少),原帖地址。
參數詳解:
學習findstr需要大量的實踐體會,所以需要建立一些txt文本以供測試。
a.txt的內容(a.txt的內容在後面會多次修改,請注意!): 複製代碼 代碼如下:Hello World
Hello Boy
hello ,good man.
goodbye!
1.最簡單的應用:在指定文本中尋找指定字串
代碼: 複製代碼 代碼如下:findstr "hello" a.txt
結果: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr "hello" a.txt
hello ,good man.
代碼: 複製代碼 代碼如下:findstr "Hello" a.txt
結果: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr "Hello" a.txt
Hello World
Hello Boy
這裡可以看出,
findstr預設是區分大小寫(跟find命令一樣)——找hello就不會出現Hello,反之亦然。
怎麼讓其不區分大小寫呢?
用/i參數!
例如: 複製代碼 代碼如下: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
複製代碼效果: 複製代碼 代碼如下:1:Hello World
2:Hello Boy
3:hello ,good man.
顯示的結果中冒號(:)是英文格式下的,在用for提取的時候需要注意!
這裡可以對比一下find命令的/n參數:
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>find /n "hello" a.txt
效果:---------- A.TXT
[3]hello ,good man.
複製代碼冒號(:)和中括弧([]),這就是差別,編寫代碼的時候一定要注意。
3.尋找包含了指定字元的文本
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /m /i "hello" *.txt
效果: 複製代碼 代碼如下:1.txt
a.txt
1.txt中的類容如下:除非參數有 /C 首碼,請使用空格隔開搜尋字串。
例如: 複製代碼 代碼如下:'FINDSTR "hello there" x.y' 在檔案 x.y 中尋找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 檔案 x.y 尋找
"hello there"。
[code]
由於加上了/m參數,所以只列出包含指定字元的檔案名稱。
4.尋找以指定字元開始或結尾的文本行
這個功能和前面介紹的最大不同就在於涉及到了“元字元”,如果你不明白什麼是“元字元”,那也不用擔心學不好這一節,這就好像不明白“water”是什麼,也不會影響喝水。
a.txt內容:
[code]
good hello
你好 hello world
Hello World
Hello Boy
hello ,good man.
goodbye!
如何尋找以hello(忽略大小寫)開始的行?
兩種方法:
①./b參數
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /b /i "hello" a.txt
效果: 複製代碼 代碼如下:Hello World
Hello Boy
hello ,good man.
good hello 和 你好 hello world,這兩行都沒有顯示出來,因為hello不在行的開始處。
②.^符
這裡的^可不是轉義符,而是Regex中的“匹配行開始的位置”。
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /i "^hello" a.txt
效果: 複製代碼 代碼如下:Hello World
Hello Boy
hello ,good man.
學完了以尋找指定字元開始的行,下面學習尋找以指定字元結尾的行。
如何尋找以hello(忽略大小寫)結尾的行?
同樣有兩種方法:
①./e參數
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /e /i "hello" a.txt
結果: 複製代碼 代碼如下:good hello
只顯示了“good hello”,因為其它行雖然有“hello”,但是他們都沒有以“hello”結尾。
②.$符
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /i "hello$" a.txt
結果:good hello
到此,我們已經學習了兩個Regex的元字元:^和$(分別和他們功能相對應的有/b、/e參數)。
5.尋找與指定字元完全符合的行
首先修改a.txt的內容: 複製代碼 代碼如下:hello
hello hello
good hello
你好 hello world
Hello World
Hello Boy
hello ,good man.
goodbye!
懂得舉一反三的的童鞋可能會試著嘗試以下代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /n /i "^hello$" a.txt
結果讓你倍感欣喜:1:hello
其實除了這一種方法外,findstr命令還提供了/x參數用來尋找完全符合的行。
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /n /i /x "hello" a.txt
結果: 複製代碼 代碼如下:1:hello
6.關閉Regex會怎麼樣?
我們可以人為地將findstr分為兩種模式,“Regex模式”和“一般字元串模式”。
findstr預設為“Regex模式”,加上/r參數也是“Regex模式”(換言之,/r參數有點多餘)。
加上/l參數後,findstr轉換為“一般字元串模式”(其實find就是這種模式、且只有這種模式)。
“一般字元串模式”下,以同樣的代碼,看看結果怎樣?
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /li "^hello" a.txt
結果什麼都沒顯示出來。
以hello開頭的行明明有以下這些,為什麼沒顯示出來呢? 複製代碼 代碼如下:hello hello
Hello World
Hello Boy
hello ,good man.
因為,當你使用“一般字元串模式”,findstr不會把^當做是Regex的元字元,而只是把其當做一般字元^,也就是說它此時已經不具備“表示行首”的功能,變成了和h之類字元一樣的普通民眾,再也沒“特權”。
改變a.txt的內容:^hello 複製代碼 代碼如下:hello
hello hello
good hello
你好 hello world
Hello World
Hello Boy
hello ,good man.
goodbye!
再次運行代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /nli "^hello" a.txt
結果: 複製代碼 代碼如下:1:^hello
7.尋找不包含指定字元的行
如果比較一下find和findstr命令就會發現,他們都具有/v,/n,/i,/off[line]參數,而且功能都是一摸一樣的,這裡說的就是/v參數。
尋找不包含hello的行。
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /vni "hello" a.txt
結果: 複製代碼 代碼如下:9:goodbye!
8.如何尋找目前的目錄及子目錄下檔案內容中包含某字串的檔案名稱?
在寫這篇教程的時候,偶然看到有批友問了這個問題,問題地址:http://bbs.bathome.net/viewthread.php?tid=14727
代碼: 複製代碼 代碼如下:findstr /ms "專業" *.txt
效果:
找出目前的目錄及子目錄下檔案內容中包含“專業”的文字檔,並只顯示其檔案名稱。
9.用文本制定要尋找的檔案 And 用文本制定要尋找的字串
用文本制定要尋找的檔案
建立一個file.txt,內容如下(這個文本中指定findstr要尋找的文本的路徑): 複製代碼 代碼如下: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
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /f:file.txt /im "hello"
效果: 複製代碼 代碼如下: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
用文本制定要尋找的字串
建立一個string.txt,內容如下(這個文本中指定findstr要尋找的字串): 複製代碼 代碼如下:^hello
world
a.txt 複製代碼 代碼如下:^hello
hello
hello hello
good hello
你好 hello
Hello World
Hello Boy
hello ,good man.
goodbye!
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /ig:string.txt a.txt
效果: 複製代碼 代碼如下:hello
hello hello
Hello World
Hello Boy
hello ,good man.
被忽略的行 複製代碼 代碼如下:^hello
good hello
你好 hello
goodbye!
從被忽略的“^hello”可以看出,在不加/l參數的前提下,用/g指定的搜尋字串中如果含有“元字元”,則作為Regex使用,而不是作為普通運算式。
10.搜尋一個完全符合的句子
其實findstr內建的協助中就有個很好的例子:
例如: 'FINDSTR "hello there" x.y' 在檔案 x.y 中尋找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 檔案 x.y 尋找
"hello there"。
可以以這個例子來做個測試。 複製代碼 代碼如下:a.txthello there
hellothere
hello
there
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /ic:"hello there" a.txt
結果: 複製代碼 代碼如下:hello there
這就是句子的完全符合了。
11.搜尋一個完全符合的詞。
這裡也涉及到了兩個元字元:\<,\>。
先試看一個例子。
a.txt 複製代碼 代碼如下:far there
farthere
there
far
farm
farmer
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr "far" a.txt
結果: 複製代碼 代碼如下:far there
farthere
far
farm
farmer
我的本意是要尋找含有“far”這個單詞的行,但是farthere、farm、farmer卻顯示出來了,這不是我想要的結果。
如果只要求顯示含有“far”這個單詞的行,該怎麼寫呢?
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr "\<far\>" a.txt
結果: 複製代碼 代碼如下:far there
far
12.指定要尋找的目錄
/d參數我一直把它和/f、/g歸為一類,但其實二者截然不同,/f、/g是用文字檔制定要尋找的檔案、字串,而/d是直接書寫目錄名到命令中。
代碼: 複製代碼 代碼如下:C:\Users\helloworld\Desktop>findstr /imd:520;編程; ".*" "*.txt"
結果: 複製代碼 代碼如下:520:
hello.txt
編程:
help.txt 複製代碼 代碼如下:win7 help比xp help多出來的命令.txt
wmic.txt
尋找在520、編程目錄中所有包含任一字元的txt檔案。
13.統計字元數
/o:在每行前列印字元位移量,在找到的每行前列印該行首距離檔案開頭的位置,也就是多少個字元,如test.txt中有如下內容: 複製代碼 代碼如下:aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
執行命令:findstr /o .* test.txt
複製代碼::上一行中的.*為Regex的內容,表示任意行,包含空行
結果如下: 複製代碼 代碼如下:0:aaaaaaaaaa
12:aaaaaaaaaa
24:aaaaaaaaaa
36:aaaaaaaaaa
48:aaaaaaaaaa
注意每行末尾的斷行符號分行符號算兩個字元。
14.以指定顏色顯示檔案名稱
/a:當被搜尋檔案名稱中含有萬用字元*或?時對搜尋結果的檔案名稱部分指定顏色屬性,具體顏色值參見color協助:
0 = 黑色 8 = 灰色
1 = 藍色 9 = 淡藍色
2 = 綠色 A = 淡綠色
3 = 淺綠色 B = 淡淺綠色
4 = 紅色 C = 淡紅色
5 = 紫色 D = 淡紫色
6 = 黃色 E = 淡黃色
7 = 白色 F = 亮白色
常用於彩色顯示,舉個簡單的例子,想要彩色顯示“批處理之家”怎麼辦,假如當前的color設定為27(背景綠色,字型白色),用藍色顯示“批處理之家”咋辦?::下一行的退格符