Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用findstr,排除gvim中的svn目录_Svn_Vim_Cmd_Findstr - Fatal编程技术网

如何使用findstr,排除gvim中的svn目录

如何使用findstr,排除gvim中的svn目录,svn,vim,cmd,findstr,Svn,Vim,Cmd,Findstr,我想找出一个目录和所有子目录中包含关键字的所有文件,还有一些.svn目录,我应该找到这些目录 在Linux系统中,我可以通过以下方式轻松完成: grep -r keyword ./ --exclude-dir ".svn" 但是当我转到windows时,findstr是windows中grep的替代品,我尝试这样做: findstr /s keyword ./* 结果将返回.svn目录,这不是我想要的 我读了报纸 但当我像下面这样尝试时,它仍然不起作用 findstr /s key

我想找出一个目录和所有子目录中包含关键字的所有文件,还有一些
.svn
目录,我应该找到这些目录

在Linux系统中,我可以通过以下方式轻松完成:

  grep -r keyword ./ --exclude-dir ".svn"
但是当我转到windows时,
findstr
是windows中
grep
的替代品,我尝试这样做:

  findstr /s keyword ./*
结果将返回
.svn
目录,这不是我想要的

我读了报纸

但当我像下面这样尝试时,它仍然不起作用

 findstr /s keyword /v ".svn" ./*
我想我使用的
findstr
可能有问题。任何帮助都会很好,提前谢谢

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

事实上,我试图在
GVim
中使用
grep
,它将调用“findstr”。

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

但是,如果您要搜索的某些文件设置了
隐藏属性,则此操作将不起作用。

假设您的文件在内容中未返回
.svn\
,则此操作应能起作用

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

感谢@Christian.K的帮助,我解决了这个问题:

我将grepprg设置如下:

 :set grepprg=findstr\ /s\ $*\ \ ^\\\|\ findstr\ /v\ /i\ /L\ \".svn\"
上述选项仅与
.svn
匹配。如果要匹配
gvim
中的
.svn\
,应:

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

尝试创建一个包含该文件的bat文件find.bat,然后键入
find。关键字
。如果需要,您可以使用
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

我想知道他们是否已修复PowerShell 3中的
Get ChildItem-Exclude
开关,以便您不必使用过滤器。我现在无法测试。事实上,我正在尝试在
GVim
中使用grep,它将调用'findstr'。@srain然后不使用
grep
grep
将在
GVim
中调用外部程序
findstr
。你的意思是
将grepprg设置为
?这是在
gvim
中使用
grep
的好方法。但是,我打算通过使用
findstr
或其他dos工具来完成这项工作。是的,这可能会有所帮助。这不适用于VIM的“grepprg”设置,它需要一个“open”命令行(如
findstr/s
;关键字和文件模式由VIM附加)。您可以/必须将其包装在批处理文件中,并从VIM使用。@Christian.K VIM允许通过
$*
指定参数的放置位置;请参见
:help'grepprg'
@IngoKarkat哦,我错过了,谢谢。但是我认为使用管道仍然不起作用(至少我无法让它起作用;-)@Christian.K是的,转义(对于Vim和Windows命令提示符)不是一件小事。这似乎是可行的:
:set grepprg=findstr\/s\$*\\\\\\\\\\\\\\\\\\\\\\\\/v\/i\/L\\”.svn\\\“
.svn
周围添加转义引号时(至少在语法上是可行的):
:set grepprg=findstr\/s\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/i\\\\\\\”.svn\\\\\\\“
@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