2013-07-29 52 views
3

我想找出所有包含目錄中的關鍵字和所有子目錄的文件,並且有一些.svn目錄,我應該記住這些目錄。如何使用findstr,排除gvim中的svn目錄

在Linux系統中,我可以很容易地做到這一點:

grep -r keyword ./ --exclude-dir ".svn" 

但是,當我翻到窗戶,findstr是在Windows grep的替代品,我嘗試做這樣的:

findstr /s keyword ./* 

結果將返回.svn目錄,這不是我想要的。

我讀了TN Findstr, on microsoft website

/v : Prints only lines that do not contain a match. 

但是當我嘗試它像下面,它仍然無法正常工作。

findstr /s keyword /v ".svn" ./* 

我想可能有一些問題,我的findstr使用。任何幫助將是偉大的,在此先感謝。

 ***************************** update1 ***************************** 

其實,我想在GVim使用grep,它會調用「findstr`。

回答

2

AFAIK您無法排除findstr中的特定(子)文件夾。在PowerShell中,你可以做這樣的事情,雖然:

$root = '.' 
$keyword = 'keyword' 

Get-ChildItem $root -Recurse -Force | ? { 
    -not $_.PSIsContainer -and $_.FullName -notlike "*\.svn*" 
} | Select-String $keyword -AllMatches 

或者你可以利用的事實,.svn子文件夾是隱藏的,做到這一點:

$root = '.' 
$keyword = "keyword" 

Get-ChildItem $root -Recurse | ? { -not $_.PSIsContainer } | 
    Select-String $keyword -AllMatches 

這是行不通的,不過,如果某些要搜索的文件具有hidden屬性設置。

+0

我不知道他們是否修復了PowerShell 3中的Get-ChildItem -Exclude開關,因此您不必使用過濾器。我無法測試我現在在哪裏。 –

+0

其實我試圖在'GVim'中使用grep,它會調用'findstr'。 – srain

+0

@srain那麼不要使用'grep'? –

1

這應該工作,假設您的文件不會在內容中返回.svn\

findstr /s "keyword" * |findstr /v /i /L ".svn\" 
+0

這對VIM的「grepprg」設置不起作用,它需要一個「打開」的命令行(像'findstr/s';關鍵字和文件模式被VIM追加)。您可能必須將其包裝在批處理文件中,並使用VIM中的文件。 –

+0

@ Christian.K Vim允許通過'$ *'指定參數的放置位置;見':help'grepprg''。 –

+0

@IngoKarkat哦,我錯過了,謝謝。但我認爲使用管道仍然不起作用(至少我無法使它工作;-) –

0

感謝@ Christian.K的幫助下,我工作了這一點:

我設置grepprg如下:

:set grepprg=findstr\ /s\ $*\ \ ^\\\|\ findstr\ /v\ /i\ /L\ \".svn\" 

只以上的選項。如果你想匹配.svn\匹配.svngvim中,您應該:

:set grepprg=findstr\ /s\ $*\ \ ^\\\|\ findstr\ /v\ /i\ /L\ \".svn\\\\\" 
0

Try cre在包含這個的bat文件find.bat中,輸入find . keyword。如果需要,您可以使用doskey來隱藏必須鍵入.

@echo off 
SETLOCAL 
set curDir=%1 
if "%curDir%"=="." set curDir=%cd% 
for /f %%i in ('dir /b/a-h-d %curDir% 2^>nul') do findstr /ilmp %2 %curDir%\%%i 
for /f %%i in ('dir /b/ad-h %curDir%') do call %0 %curDir%\%%i %2 
ENDLOCAL