1. ホーム
  2. powershell

[解決済み】PowerShellを使用してディレクトリ内のファイルをループ処理する。

2022-03-30 02:06:59

質問

以下のコードを、1つのファイルだけでなく、ディレクトリ内のすべての .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

解決方法は?

これを試してみてください。

Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files" -Filter *.log | 
Foreach-Object {
    $content = Get-Content $_.FullName

    #filter and save content to the original file
    $content | Where-Object {$_ -match 'step[49]'} | Set-Content $_.FullName

    #filter and save content to a new file 
    $content | Where-Object {$_ -match 'step[49]'} | Set-Content ($_.BaseName + '_out.log')
}