find命令的基本格式是這樣的:find"要查詢的字串"要查詢的檔案,在這裡,"要查詢的字串"這個內容是必不可少的,引號也是必須的。例如:find"bathome"d:\test.txt,表示在D盤根目錄下的文字檔案test.txt中查詢含有bathome這一字串的所有行。 find的結果將會有兩種情況: 1、當檔案中包含要查詢的字串時,將返回這個字串所在位置的整行內容,具體格式為:第一行是"----------×××"(×××表示被查詢的檔名,不包括引號對),第二行開始才出現包含字串的整行內容; 2、當檔案中沒有出現要查詢的字串時,find的結果僅僅返回"----------×××"這一行內容(×××表示被查詢的檔名,不包括引號對)。 在查詢指定字串的時候,有的場合需要區分大小寫,有的場合則對大小寫並不在意,如何實現這些需求呢? 很簡單,在find的時候,新增或取消/i開關就是了,具體用法為:find/i"Abc"test.txt表示不區分大小寫,文字內容中含有Abc、abc、ABC之類的都算;find"Abc"test.txt則嚴格區分字元大小寫,只能匹配Abc,而不能匹配abc、ABC之類的字元。 有時候,我們的需求並不是為了查詢到某個字串,而是要檢測哪些行不含有特定的字串,這個時候,可以使用開關/v,用法為:find/v"Abc"test.txt,它表示查詢那些不含字串Abc的行(Abc要區分大小寫),如果不區分abc的大小寫,那麼,應該寫成find/i/v"Abc"test.txt。 有時候,我們的要求很簡單,僅僅只是想統計包含某個字串的行總共有多少,這個時候,應該使用開關/c,寫成find/c"abc"test.txt。 如果要在每行的行首顯示行號,怎麼辦?那就寫成find/n"abc"test.txt吧,它會把test.txt的內容都顯示出來,與原文不一樣的是,在每行內容的行首,都加上了行號——注意,它僅僅是在顯示的時候加上行號而已,並沒有真正改寫檔案的內容。 如果你看到這樣的命令:find/i/v/n"Abc"test.txt,請一點要先沉住氣,不要被眾多的開關弄得眼花繚亂嚇趴下了,仔細對照上面的解釋,相信你很快就會理解它的功能:在test.txt檔案中,查詢不包含字串Abc的所有行,並在行首標上這些行的行號,查詢的時候,字串Abc不區分大小寫。 要是使用這樣的語句:find/c/n"abc"test.txt,會出現什麼樣的結果呢?答案是:開關/n會被忽略掉,最終結果不會顯示帶行號的行內容,只會顯示匹配的總行數而已。 echoabcdef|find"abc",見過這種寫法嗎?它的含義是:在字串abcdef中,檢測是否存在字串abc,也就是說,find支援管道符號,把管道符號之前的語句的執行結果,作為指定字串的查詢物件,甚至,你可以使用這樣的語句:find"abc"test.txt|find"xyz",它表示在test.txt中查詢同時存在字串abc和字串xyz的行,只要你願意,你可以繼續用管道符號把這個find語句連線下去,我們把這個過程稱為多重過濾。 在前面,我們說過,在find"要查詢的字串"要查詢的檔案這條命令語句中,引號是必須的,要是我們要查詢的內容就是雙引號本身,那又該怎麼辦? 答案很簡單:把雙引號本身先用雙引號轉義,再放到雙引號對中,寫成find""""test.txt的格式,如果要查詢兩個連續的雙引號,則應該寫成find""""""test.txt。 如果你想查詢兩行之間的字元塊,我勸你趁早放棄這個瘋狂的想法,因為,find僅僅針對位於同一行上的字串,不能查詢跨行的字元塊。 與findstr命令相比,find的功能確實有限得多,僅僅因為不支援正則表示式這一點,就有不少人把它視為雞肋,從而遭到無情的拋棄。 然而,find並非一無是處,憑藉自己的獨門絕技,在與findstr的競爭中,它掙得了一席之地。 這些獨門絕技是什麼呢?(感謝BatCoder的提醒和zqz0012005的補充) 1、統計含指定字串的總行數。find/c"abc"test.txt可以統計test.txt中含有字串abc的總行數,而findstr則沒有直接提供該功能,需要配合for語句才能實現; 2、find可以讀取Unicode格式的文字,而findstr則不行; 3、find可以過濾某些特殊字元,而findstr則不行,比如,我們在使用fsutilfsinfodrives語句查詢磁碟分割槽的時候,如果想讓碟符分行顯示而不是顯示在同一行上的時候(這在用for語句提取碟符的時候很有用),find可以大顯身手,而findstr只能乾瞪眼了,具體語句為:fsutilfsinfodrives|find/v"" 參考資料: http://www.hackbase.com/tech/2009-10-26/57331.html
find命令的基本格式是這樣的:find"要查詢的字串"要查詢的檔案,在這裡,"要查詢的字串"這個內容是必不可少的,引號也是必須的。例如:find"bathome"d:\test.txt,表示在D盤根目錄下的文字檔案test.txt中查詢含有bathome這一字串的所有行。 find的結果將會有兩種情況: 1、當檔案中包含要查詢的字串時,將返回這個字串所在位置的整行內容,具體格式為:第一行是"----------×××"(×××表示被查詢的檔名,不包括引號對),第二行開始才出現包含字串的整行內容; 2、當檔案中沒有出現要查詢的字串時,find的結果僅僅返回"----------×××"這一行內容(×××表示被查詢的檔名,不包括引號對)。 在查詢指定字串的時候,有的場合需要區分大小寫,有的場合則對大小寫並不在意,如何實現這些需求呢? 很簡單,在find的時候,新增或取消/i開關就是了,具體用法為:find/i"Abc"test.txt表示不區分大小寫,文字內容中含有Abc、abc、ABC之類的都算;find"Abc"test.txt則嚴格區分字元大小寫,只能匹配Abc,而不能匹配abc、ABC之類的字元。 有時候,我們的需求並不是為了查詢到某個字串,而是要檢測哪些行不含有特定的字串,這個時候,可以使用開關/v,用法為:find/v"Abc"test.txt,它表示查詢那些不含字串Abc的行(Abc要區分大小寫),如果不區分abc的大小寫,那麼,應該寫成find/i/v"Abc"test.txt。 有時候,我們的要求很簡單,僅僅只是想統計包含某個字串的行總共有多少,這個時候,應該使用開關/c,寫成find/c"abc"test.txt。 如果要在每行的行首顯示行號,怎麼辦?那就寫成find/n"abc"test.txt吧,它會把test.txt的內容都顯示出來,與原文不一樣的是,在每行內容的行首,都加上了行號——注意,它僅僅是在顯示的時候加上行號而已,並沒有真正改寫檔案的內容。 如果你看到這樣的命令:find/i/v/n"Abc"test.txt,請一點要先沉住氣,不要被眾多的開關弄得眼花繚亂嚇趴下了,仔細對照上面的解釋,相信你很快就會理解它的功能:在test.txt檔案中,查詢不包含字串Abc的所有行,並在行首標上這些行的行號,查詢的時候,字串Abc不區分大小寫。 要是使用這樣的語句:find/c/n"abc"test.txt,會出現什麼樣的結果呢?答案是:開關/n會被忽略掉,最終結果不會顯示帶行號的行內容,只會顯示匹配的總行數而已。 echoabcdef|find"abc",見過這種寫法嗎?它的含義是:在字串abcdef中,檢測是否存在字串abc,也就是說,find支援管道符號,把管道符號之前的語句的執行結果,作為指定字串的查詢物件,甚至,你可以使用這樣的語句:find"abc"test.txt|find"xyz",它表示在test.txt中查詢同時存在字串abc和字串xyz的行,只要你願意,你可以繼續用管道符號把這個find語句連線下去,我們把這個過程稱為多重過濾。 在前面,我們說過,在find"要查詢的字串"要查詢的檔案這條命令語句中,引號是必須的,要是我們要查詢的內容就是雙引號本身,那又該怎麼辦? 答案很簡單:把雙引號本身先用雙引號轉義,再放到雙引號對中,寫成find""""test.txt的格式,如果要查詢兩個連續的雙引號,則應該寫成find""""""test.txt。 如果你想查詢兩行之間的字元塊,我勸你趁早放棄這個瘋狂的想法,因為,find僅僅針對位於同一行上的字串,不能查詢跨行的字元塊。 與findstr命令相比,find的功能確實有限得多,僅僅因為不支援正則表示式這一點,就有不少人把它視為雞肋,從而遭到無情的拋棄。 然而,find並非一無是處,憑藉自己的獨門絕技,在與findstr的競爭中,它掙得了一席之地。 這些獨門絕技是什麼呢?(感謝BatCoder的提醒和zqz0012005的補充) 1、統計含指定字串的總行數。find/c"abc"test.txt可以統計test.txt中含有字串abc的總行數,而findstr則沒有直接提供該功能,需要配合for語句才能實現; 2、find可以讀取Unicode格式的文字,而findstr則不行; 3、find可以過濾某些特殊字元,而findstr則不行,比如,我們在使用fsutilfsinfodrives語句查詢磁碟分割槽的時候,如果想讓碟符分行顯示而不是顯示在同一行上的時候(這在用for語句提取碟符的時候很有用),find可以大顯身手,而findstr只能乾瞪眼了,具體語句為:fsutilfsinfodrives|find/v"" 參考資料: http://www.hackbase.com/tech/2009-10-26/57331.html