2016-02-21 3 views
1

У меня есть 100 файлов .sql, и я хотел бы проверить, включен ли String "Das ist ein Test" в эти файлы.PowerShell: как избавиться от выходных строк в поиске рекурсивных данных

До сих пор я нашел только командное устройство Select-String. Это дает мне, однако, только файлы, в которых найден String.

Вот мой PowerhShell сценарий:

$path = "F:\Masterarbeit\Daten\" 
$search = "Das ist ein Test" 

Get-ChildItem $path -Filter *.sql -Recurse | Select-String -Pattern $search -casesensitive | select FileName 

exit 

И это выход я получаю:

PowerShell Output

Как я теперь могу изменить свой код так, что я получаю только имя файла, где строка не содержится вообще? Я также знаю, что есть параметр, называемый -NotMatch, но, к сожалению, он возвращает только все строки, где строка не найдена.

ответ

0

Прямо сейчас вы делаете проверку на каждую строку каждого файла. Вы хотите сделать проверку на каждый файл (если он содержит строку).

$path = "F:\Masterarbeit\Daten" 
$search = "Das ist ein Test" 

# loop through all files 
foreach ($file in Get-ChildItem $path -Filter *.sql -Recurse) { 
    # get all lines from the current file containing the test string 
    $test = Get-Content $file.FullName | Select-String $search 
    # are there any? 
    if ($test) { 
     # then skip this one 
     continue 
    } 
    # otherwise print the file name 
    $file 
} 
+0

ах хорошо, спасибо за совет, но теперь я получаю сообщение об ошибке, что путь не найден -> Например: 'Get-Content: путь«C: \ Windows \ system32 \ Daten_1.sql "не может быть найден, потому что он не существует + $ test = Get-Content $ file | Select-String $ search'. Я немного смущен сообщением об ошибке. – Steffi

+0

Очевидно, что файл $ file не возвращает полный путь. Мне пришлось добавить '.FullName', чтобы он работал. – Swonkie

0

Я бы то, что у вас есть и обернуть Select-String в Where-object блоке с оператором -not.

Get-ChildItem $path -Filter *.sql -Recurse | 
#Only keep files that don't return a match 
Where-Object { -not (Select-String -Path $_.FullName -Pattern $search -casesensitive) } | 
Select-Object Name 
Смежные вопросы