Como posso alterar o código a seguir para examinar todos os arquivos .log no diretório e não apenas o arquivo?
Eu preciso percorrer todos os arquivos e excluir todas as linhas que não contêm "step4" ou "step9". Atualmente, isso criará um novo arquivo, mas não tenho certeza de como usar o for each
loop aqui (novato).
Os arquivos reais são nomeados assim: 2013 09 03 00_01_29.log . Eu gostaria que os arquivos de saída os substituíssem ou tivessem o mesmo nome, anexado com "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
fonte
fonte
BaseName
porFullName
, obtenho o que quero.Para obter o conteúdo de um diretório, você pode usar
Então você pode fazer um loop sobre essa variável também:
Uma maneira ainda mais fácil de colocar isso é o
foreach
loop (graças a @Soapy e @MarkSchultheiss):fonte
$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){...}
Se você precisar fazer um loop dentro de um diretório recursivamente para um tipo específico de arquivo, use o comando abaixo, que filtra todos os arquivos do
doc
tipo$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc
Se você precisar fazer a filtragem em vários tipos, use o comando abaixo.
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc,*.pdf
Agora, a
$fileNames
variável atua como uma matriz da qual você pode fazer um loop e aplicar sua lógica de negócios.fonte
-Force
parâmetro Get-ChildItem. Consulte o documento em docs.microsoft.com/en-us/powershell/module/… .Outras respostas são ótimas, só quero adicionar ... uma abordagem diferente utilizável no PowerShell: Instale os utilitários GNUWin32 e use grep para exibir as linhas / redirecionar a saída para o arquivo http://gnuwin32.sourceforge.net/
Isso substitui o novo arquivo sempre:
Isso anexa a saída do log, caso você substitua o arquivo logIn e deseje manter os dados:
Nota: para poder usar os utilitários GNUWin32 globalmente, você precisa adicionar a pasta bin ao caminho do sistema.
fonte