Как я могу изменить следующий код для просмотра всех файлов .log в каталоге, а не только одного файла?
Мне нужно перебрать все файлы и удалить все строки, которые не содержат «step4» или «step9». В настоящее время это создаст новый файл, но я не уверен, как использовать for each
цикл здесь (новичок).
Фактические файлы названы так: 2013 09 03 00_01_29.log . Я хотел бы, чтобы выходные файлы либо перезаписывали их, либо имели одинаковое имя с добавлением «out».
$In = "C:\Users\gerhardl\Documents\My Received Files\Test_In.log"
$Out = "C:\Users\gerhardl\Documents\My Received Files\Test_Out.log"
$Files = "C:\Users\gerhardl\Documents\My Received Files\"
Get-Content $In | Where-Object {$_ -match 'step4' -or $_ -match 'step9'} | `
Set-Content $Out
powershell
user2725402
источник
источник
BaseName
сFullName
я получаю то , что хочу.Для получения содержимого каталога вы можете использовать
Затем вы можете перебрать и эту переменную:
Еще более простой способ сделать это -
foreach
цикл (благодаря @Soapy и @MarkSchultheiss):источник
$files = Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files\" $files | Where-Object { $outFile = $_.Name + "out" Get-Content $_.FullName | Where-Object { $_ -match 'step4' -or $_ -match 'step9' } | Set-Content $outFile }
foreach ($f in Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files\") { ... }
ForEach ($f in $files){...}
Если вам необходимо выполнить рекурсивный цикл внутри каталога для определенного типа файла, используйте команду ниже, которая фильтрует все файлы типа
doc
файла$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc
Если вам нужно выполнить фильтрацию для нескольких типов, используйте команду ниже.
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc,*.pdf
Сейчас
$fileNames
переменная действует как массив, из которого вы можете зациклить и применить свою бизнес-логику.источник
-Force
параметр Get-ChildItem. См. Его документ в docs.microsoft.com/en-us/powershell/module/… .Другие ответы хороши, я просто хочу добавить ... другой подход, используемый в PowerShell: установите утилиты GNUWin32 и используйте grep для просмотра строк / перенаправления вывода в файл http://gnuwin32.sourceforge.net/
Это перезаписывает новый файл каждый раз:
Это добавляет вывод журнала в случае, если вы перезаписываете файл входа в систему и хотите сохранить данные:
Примечание: чтобы иметь возможность использовать утилиты GNUWin32 глобально, вы должны добавить папку bin в системный путь.
источник