2014-02-12 49 views
0

我有一個包含約500個值的txt文件,每行一個。我需要檢查這些500個值中任何一個出現在每個包含10萬行的6個csv文件中的任何一個。我可以在這6個CSV文件中搜索一個值,使用通過命令行在多個文件中搜索多個字符串

for /f "delims==" %%f in ('dir /s /b "P:\*.txt"') do FIND /N "[SEARCHSTRING]" "%~1%%f" >> "C:\found.txt" 

,但我怎麼辦多次搜索,通過命令行或批處理文件(區分大小寫)自動?

+0

都有。你看看批處理腳本嗎?你可能會有更好的運氣 – Mozzie

+0

安裝一個unix工作類似的系統'fgrep -lf srchFile file1 file * ..'將列出srchFile中至少包含一個單詞的所有文件。在'l'後面加上'-f',那麼搜索就會打印文件名以及與listFile中單詞匹配的完整行。祝你好運。 – shellter

回答

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=c:\sourcedir" 
SET "destdir=C:\destdir" 
for /f "delims=" %%a in ('dir /s /b "%sourcedir%\*.csv"') do (
    FINDSTR /N /g:"yourtextfilecontaining500linestomatch.txt" "%%~fa") > "%destdir%\%%~nafound.txt" 
GOTO :EOF 

你在問什麼是相當不清楚。我使用c:\sourcedir作爲.csv文件的位置和c:\destdir作爲報告的位置。與原來的更換 FINDSTR /N /g:"yourtextfilecontaining500linestomatch.txt" "%%~fa") > "%destdir%\%%~nafound.txt(帶有雙>會積聚行成一個單一的文件 - 如果這就是你想要的東西既然這樣,一個新的文件將與名稱創建與您的.csv + found.txt

+0

這太好了!我想用>>來追加所有的結果都是一個文件,但是還有什麼辦法可以打印它的文件名發現了,不僅僅是#行? FINDSTR的/ M標誌不允許這兩個。 – Aeon2058

+0

如何在'findstr'行之前使用'echo(=====文件%%〜fa ====='這應該會給你一個明顯的分隔符,你可以將'〜f'改爲' 〜dpnx'顯示(你選擇的)'d'rive,'p'ath,'n'ame和e'x'tension。不想要名字的一部分?忽略該字母。 – Magoo

+0

謝謝這非常有幫助! – Aeon2058

0

一個簡單的方法是使用批處理腳本。您可以逐個遍歷每個文件。如果你想一次完成它們,你需要編程你的程序。

for /L %%A in (1,1,6) do (
    Your code goes here 
) 

該批處理腳本將循環六次。我不太確定你是如何指定文件的,但是如果你循環遍歷每個文件,它就會工作。

所以,把你當前批處理腳本,我說:「你的代碼放在這裏」

for /f "delims==" %%f in ('dir /s /b "P:\*.txt"') do FIND /N "[SEARCHSTRING]" "%~1%%f" >> "C:\found.txt" 

但你需要編輯它指向您要搜索的文件。如果你的文件是1.txt,2.txt 3.txt,那麼你所需要做的就是將你的文件名設置爲當前的循環迭代編號。

0

我一直在使用這個殼功能的變種多年:

ematch() { 
    for f in $(find . -type f | grep -v '~' | grep -v \.svn\/) ; do 
    egrep "$1" "$f" /dev/null 2> /dev/null 
    done 
} 

- > ematch 「(字符串1 |字符串2 | STRING3)」

隨意,以適應您的需求,並發表您的mods在這裏。

相關問題