web-dev-qa-db-ja.com

フォルダー内のすべてのテキストファイルから単一の出力ファイルにパターンに一致する行を抽出する

フォルダー内のすべてのファイルで「%%」で始まる各行を抽出し、それらの行を別のテキストファイルにコピーしようとしています。現在、PowerShellコードでこのコードを使用していますが、結果が得られません。

$files = Get-ChildItem "folder" -Filter *.txt
foreach ($file in $files)
{
if ($_ -like "*%%*")
{
Set-Content "Output.txt" 
}  
}
7
Jabir Jamal

Select-Stringを使用するというmklement0の提案が道だと思います。彼の答えに加えて、Get-ChildItemの出力をSelect-Stringにパイプして、プロセス全体がPowershellの1つのライナーになるようにすることができます。

このようなもの:

Get-ChildItem "folder" -Filter *.txt | Select-String -Pattern '^%%' | Select -ExpandProperty line | Set-Content "Output.txt"
13
Dave Sexton
ls *.txt | %{
$f = $_
  gc $f.fullname | {
     if($_.StartWith("%%") -eq 1){
        $_ >> Output.txt
     }#end if
  }#end gc
}#end ls

エイリアス

ls - Get-ChildItem
gc - Get-Content
% - ForEach
$_ - Iterator variable for loop
>> - Redirection construct
# - Comment

http://ss64.com/ps/

1
Shantanu Gupta

最初に使用する必要があります

Get-Content

ファイルのコンテンツを取得するため。次に、文字列の一致を行い、それに基づいて、もう一度ファイルにコンテンツを設定します。 get-contentを使用し、foreach内に別のループを配置して、ファイル内のすべての行を繰り返します。

この論理があなたのお役に立てば幸いです

0
Ranadip Dutta