Перебирать файлы в каталоге с помощью PowerShell

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

Мне нужно перебрать все файлы и удалить все строки, не содержащие «шаг4» или «шаг9». В настоящее время будет создан новый файл, но я не уверен, как использовать здесь для каждого цикла (новичок).

Фактические файлы называются как это: 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  "Получить  -Содержание $ In |  Where-Object {$ _ -match 'step4' -or $ _ -match 'step9'} |  `Set-Content $ Out  

Попробуйте:

  Get-ChildItem" C:   Users  gerhardl  Documents  My Received Files "-Filter * .log |  Foreach-Object {$ content = Get-Content $ _. FullName #filter и сохраните содержимое в исходный файл $ content |  Where-Object {$ _ -match 'step [49]'} |  Set-Content $ _. FullName #filter и сохранение содержимого в новый файл $ content |  Where-Object {$ _ -match 'step [49]'} |  Set-Content ($ _. BaseName + '_out.log')}  

Чтобы получить содержимое каталога, который вы можете использовать

  $ files = Get-ChildItem "C:  Users  gerhardl  Documents  My Received Files "  

Затем вы также можете перебрать эту переменную:

  for ($ i = 0; $ i -lt $ files.Count; $ i ++)  {$ outfile = $ files [$ i] .FullName + "out" Get-Content $ files [$ i] .FullName |  Where-Object {($ _ -match 'step4' -или $ _ -match 'step9')} |  Set-Content $ outfile}  

Еще более простой способ выразить это — цикл foreach (спасибо @Soapy и @MarkSchultheiss):

  foreach ($ f в $ files) {$ outfile = $ f.FullName + "out" Get-Content $ f.FullName |  Where-Object {($ _ -match 'step4' -или $ _ -match 'step9')} |  Set-Content $ outfile}  


Чтобы получить содержимое каталога, вы можете использовать

  $ files = Get-ChildItem "C:  Users  gerhardl  Documents  My Received Files "  

Тогда вы также может перебирать эту переменную:

  for ($ i = 0; $ i -lt $ files.Count; $ i ++) {$ outfile = $ files [$ i  ] .FullName + "out" Get-Content $ files [$ i] .FullName |  Where-Object {($ _ -match 'step4' -или $ _ -match 'step9')} |  Set-Content $ outfile}  

Еще более простой способ выразить это — цикл foreach (спасибо @Soapy и @MarkSchultheiss):

  foreach ($ f в $ files) {$ outfile = $ f.FullName + "out" Get-Content $ f. FullName |  Where-Object {($ _ -match 'step4' -или $ _ -match 'step9')} |  Set-Content $ outfile}  

Если вам нужно рекурсивно выполнить цикл внутри каталога для файл определенного типа, используйте команду ниже, которая фильтрует все файлы типа doc типа файла

$ fileNames = Get-ChildItem -Path $ scriptPath -Recurse -Include * .doc

Если вам нужно выполнить фильтрацию для нескольких типов, используйте следующую команду.

$ fileNames = Get-ChildItem -Path $ scriptPath -Recurse -Include * .doc, *. pdf

Теперь $ fileNames действует как массив , из которого вы можете выполнить цикл и применить свою бизнес-логику.


Если вам нужно рекурсивно выполнить цикл внутри каталога для определенного типа файла, используйте команду ниже, которая фильтрует все файлы типа doc типа

$ fileNames = Get-ChildItem -Path $ scriptPath -Rec urse -Include * .doc

Если вам нужно выполнить фильтрацию для нескольких типов, используйте команду ниже.

$ fileNames = Get-ChildItem -Path $ scriptPath -Recurse -Include * .doc, *. pdf

Теперь переменная $ fileNames действует как array , из которого можно зациклить и применить бизнес-логику.

Оцените статью
techsly.ru
Добавить комментарий