2

Этот скрипт - почти то, что мне нужно:

$input_path = 'C:\Common'
$output_file = 'C:\Common\extracted.txt'
$regex = 'assets'

Get-ChildItem -Path $input_path -Filter *.txt 
| Select-String -Pattern $regex -AllMatches  
| Out-File $output_file -Force

У меня проблема в том, что когда я изменяю $ inputpath, скажем, C:\Common\Data, выходной файл добавляет данные \ в начало строки. Может кто-нибудь сказать мне, как не иметь это последнее имя папки в выводе?

1 ответ1

0
ls -Fo $input_path -Fi *.txt|Select-String -Patt $regex -All|%{$f=$_.path -split '\\';$f[-2]+'\;'+$_.filename+';'+$_.linenumber+';'+$_.line}|Out-File $output_file -Fo -width 400 -OutB 0x7FFFFFFF -EA 0
  • -OutB 0x7FFFFFFF - размер буфера для размещения файла - ускорение создания и заполнения файла
  • -width 400 - ширина строки в файле, размер по умолчанию 80
  • -EA 0 = ErrorAction - пропустить все ошибки

  • $f=$_.path -split '\\' - разделить полный путь к файлу, разделить \ и сохранить детали в массив $f

  • $f[-2] - вернуть 2-й элемент в конце массива $ f (каталог файлов; в этом примере - каталог Data )
  • $_.filename - имя файла
  • $_.linenumber - номер строки, в которой находится шаблон поиска (переменная $ regex)
  • $_.line - текст в номере строки

  • ls -Fo $input_path -Fi *.txt <=> Get-ChildItem -Path $input_path -Filter *.txt

  • Select-String -Patt $regex -All <=> Select-String -Pattern $regex -AllMatches

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .