2016-02-05 2 views
0

Я пытаюсь удалить строки с определенным контентом из нескольких текстовых файлов.Удалить строки из нескольких текстовых файлов в PowerShell

Он работает в ядре, но он будет переписывать каждый файл, даже если никаких изменений не будет сделано, что не круто, если вы просто модифицируете 50 из примерно 3000 logonscripts.
Я даже сделал заявление if, но похоже, что он не работает.

Хорошо это то, что у меня уже есть:

#Here $varFind will be escaped from potential RegEx triggers. 
$varFindEscaped = [regex]::Escape($varFind) 

#Here the deletion happens. 
foreach ($file in Get-ChildItem $varPath*$varEnding) { 
    $contentBefore = Get-Content $file 
    $contentAfter = Get-Content $file | Where-Object {$_ -notmatch $varFindEscaped} 
    if ($contentBefore -ne $contentAfter) {Set-Content $file $contentAfter} 
} 

Что переменные означают:
$ varPath это путь, в котором logonscripts есть.
$ varEnding - это окончание файла для изменения.
$ varFind - это строка, которая вызывает удаление строки.

Любая помощь будет высоко оценена.

Приветствия
LOWA Cent

ответ

0

Вы должны прочитать файл независимо, но некоторые улучшения в вашем состоянии изменения могут помочь.

#Here the deletion happens. 
foreach ($file in Get-ChildItem $varPath*$varEnding) { 
    $data = (Get-Content $file) 
    If($data -match $varFindEscaped){ 
     $data | Where-Object {$_ -notmatch $varFindEscaped} | Set-Content $file 
    } 
} 

Прочтите файл на $data. Проверьте, есть ли в файле шаблон $varFindEscaped. Если это, чем отфильтровать те, которые соответствуют одному и тому же шаблону. Еще мы переходим к следующему файлу.

+0

Привет, Мэтт, ваш код работает как шарм! Большое спасибо! –