フォルダー内のすべてのファイルで「%%」で始まる各行を抽出し、それらの行を別のテキストファイルにコピーしようとしています。現在、PowerShellコードでこのコードを使用していますが、結果が得られません。
$files = Get-ChildItem "folder" -Filter *.txt
foreach ($file in $files)
{
if ($_ -like "*%%*")
{
Set-Content "Output.txt"
}
}
Select-String
を使用するというmklement0の提案が道だと思います。彼の答えに加えて、Get-ChildItem
の出力をSelect-String
にパイプして、プロセス全体がPowershellの1つのライナーになるようにすることができます。
このようなもの:
Get-ChildItem "folder" -Filter *.txt | Select-String -Pattern '^%%' | Select -ExpandProperty line | Set-Content "Output.txt"
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
最初に使用する必要があります
Get-Content
ファイルのコンテンツを取得するため。次に、文字列の一致を行い、それに基づいて、もう一度ファイルにコンテンツを設定します。 get-contentを使用し、foreach内に別のループを配置して、ファイル内のすべての行を繰り返します。
この論理があなたのお役に立てば幸いです