Я не могу найти точный ответ для моего конкретного использования в одном месте, поэтому я спрашиваю. Я очень новичок в PowerShell, поэтому команды для меня чужды.
Используя PowerShell, как я могу найти в файле все вхождения "любой строки" между двумя конкретными строками, а затем вывести каждое вхождение "любой строки" в другой текстовый файл? Имейте в виду, "любая строка" меняется, в то время как конкретные строки каждый раз одинаковы.
Примечание. Мой код, приведенный ниже, фактически ищет все файлы .xml в определенной папке, что я и хочу.
Вот что у меня сейчас:
$path = "E:\files"
$outfile = "E:\testoutput.txt"
$files = Get-Childitem $path *.xml -Recurse | Where-Object { !($_.psiscontainer) }
$pattern = "<Tag>(.*?)</Tag>"
# Loop through all the $files
foreach ($file in $files) {
$file.Name | Out-File $outfile -Append
# Loop through each line that matches $pattern
Get-Content $file.FullName | Where-Object {$_ -match $pattern} | ForEach-Object {
$_ | Out-File $outfile -Append
}
}
Это в основном работает, но помещает "Tag" и «/Tag» (внутри угловых скобок) в выходной файл, который мне не нужен. Я хочу только то, что находится между этими тегами. Это очень медленный сценарий, занимающий несколько минут для более чем 165 файлов. Я экспериментировал с другим кодом, используя Select-String, который был намного быстрее, но все равно содержал дополнительную информацию, которую я не хотел. Спасибо за вашу помощь!