|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Проверить нужное количество текста в каждом блоке txt файла |
|
PowerShell - [решено] Проверить нужное количество текста в каждом блоке txt файла
|
Ветеран Сообщения: 531 |
Профиль | Отправить PM | Цитировать Здравствуйте. Можно ли проверить нужное количество найденного текста в каждом блоке txt файла с помощью скрипта?
Нужно проверить всю папку с txt файлами.. только одну папку (входящие в нее папки проверять не нужно). Эта папка будет с txt файлами, в этих файлах много блоков текста, разделенных разделителем. Над каждым разделителем есть ссылка на файл. Необходимо проверить, чтобы имя файла в ссылке (без расширения) находилось в текущем блоке 4 раза (считая имя в ссылке на файл). Т.е. чтобы эта фраза нашлась 4 раза в текущем блоке. В каждом блоке свое имя файла, но время от времени это имя может повторяться. Если в каком то блоке количество фраз (имен файла) не 4, то должно вывестись на экран имя файла в ссылке (в текущем блоке), а также имя txt файла, где находится текущий блок. Разделитель такой: //================== Пример одного txt файла (на самом деле блоков будет гораздо больше). файл film.txt Скрытый текст
shdfgjlhasdjlghsjlahgsajghsdlag [img]http://s5.depic.me/01426/2zysleesxtfn_o/hdptitle.jpg[/img] [img]http://s7.depic.me/01425/w1xhdfhweudsl6_o/0001start_m.jpg[/img] [img]http://s7.depic.me/01425/34s1fhsfsyo_o/0001start_t.jpg[/img] File Name.type: 0001start.mp4 Resolution: 1920x1080 Duration: 0:01:05 Filesize: 47Mb [b]Download [url]https://fboom.me/file/edsdhsdf0d1/0001start.mp4[/url][/b] //================== shdfgjlhasdjlghsjlahgsajghsdlag [img]http://s7.depic.me/01425/rqhdfdu6_o/0002start_m.jpg[/img] [img]http://s7.depic.me/01425/uksdffiv0zy_o/0002start_t.jpg[/img] File Name.type: 0002start.mp4 Resolution: 1280x720 Duration: 0:00:12 Filesize: 11Mb [b]Download [url]https://fboom.me/file/5115645603f/0002start.mp4[/url][/b] //================== lasjgklhjwreak;lghsjklgljasg [img]http://s6.depic.me/02008/t8gertar3s6_o/karton0001_m.jpg[/img] [img]http://s6.depic.me/02008/s93wegbe9n_o/karton0001_t.jpg[/img] karton0034.wmv | 1280x720 | 0:09:35 | 272Mb [b]Download [url]https://k2s.cc/file/d7eeewfg845/karton0001.mp4[/url][/b] //================== lasjgklhjwreak;lghsjklgljasg [img]http://s7.depic.me/02008/sgo9rthhv3f_o/karton0002_m.jpg[/img] [img]http://s7.depic.me/02008/i9ppqrw7eif_o/karton0002_t.jpg[/img] karton0002.avi | 720x540 | 0:06:01 | 135Mb [b]Download [url]https://k2s.cc/file/011fgdfdcbec/karton0002.mp4[/url][/b] //================== Результат: Почему такой результат? В третьем блоке, по ссылке над разделителем, имя файла (без расширения) получается karton1.., так вот, эта фраза (karton1) находится в текущем (третьем) блоке не 4 раза (а всего 3). Поэтому вывелось имя файла в ссылке и имя txt файла, где находится этот блок. Во всех других блоках найденные имена файлов в ссылках над разделителями находятся по 4 раза, т.е. там все совпадает и поэтому не выводится на экран. |
|
Отправлено: 09:02, 25-08-2019 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Alexander_88:
Цитата Alexander_88:
function parsefile { process{ $fname = $_.name if (($x = gc $_.fullname -raw) -match $split){ [array]$arr = $x -split $split if ($arr.length -gt 1){ for($i=0;$i -lt $arr.length-1;$i++){ $arr[$i] -match '(?<=\[url\])([^\[]+)(?=\[/url])'|out-null if($matches[1]){ $uri = [uri]$matches[1] $r = ([io.fileinfo]$uri.segments[-1]).basename $cnt = (sls -inp $arr[$i] -patt $r -all).matches.count if($cnt -ne $count){ write-host $r - $fname -for magenta } } else { write-host Error! Name file not found. -for red } } } } else { write-host Error! $split - not found -for red } } } $fld = 'd:\*' $flt = '*.txt' $split = "//==================" $count = 4 dir $fld -inc $flt -file|parsefile |
||
------- Отправлено: 15:03, 25-08-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 531
|
Профиль | Отправить PM | Цитировать Спасибо, все работает, только почему то файлы, в имени которых есть символы "[" "]" (квадратные скобки), не обрабатываются и появляются ошибки:
Get-Content : Не удается найти параметр, соответствующий имени параметра "raw". C:\Users\Alexander\work\new\Новый текстовый документ.ps1:4 знак:28 + if (($x = gc $_.fullname -raw) -match $split){ + ~~~~ + CategoryInfo : InvalidArgument: (:) [Get-Content], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand |
Отправлено: 20:41, 25-08-2019 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Alexander_88, это особенность любого языка, в котором некоторые символы внутри строк могут рассматриваться как специальные. С одной стороны, это даёт некоторые плюсы, с другой — минусы, с одним из которых Вы познакомились.
Сравните: Get-ChildItem -Path 'C:\Мои проекты\0274' -File |` ForEach-Object -Process { $_.FullName Get-Content -Path $_.FullName } Цитата:
Get-ChildItem -Path 'C:\Мои проекты\0274' -File |` ForEach-Object -Process { $_.FullName Get-Content -Path $([Management.Automation.WildcardPattern]::Escape($_.FullName)) } Цитата:
|
||
Отправлено: 21:41, 25-08-2019 | #4 |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать Цитата Alexander_88:
|
||
------- Отправлено: 22:39, 25-08-2019 | #5 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Alexander_88:
Квадратные скобки в путях используются для расширения возможностей простых шаблонов "*", "?", т.е. они позволяют ещё использовать и диапазоны типа [a-d], [aem] или [0-9] в именах. Например: - найдет все файлы с любым расширением, но только с именем, начинающимся на a, b или c ... |
|
------- Отправлено: 02:45, 26-08-2019 | #6 |
Ветеран Сообщения: 531
|
Профиль | Отправить PM | Цитировать Теперь квадратные скобки не проблема, спасибо
|
Отправлено: 05:17, 26-08-2019 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Извлечение строк in.txt -> out.txt в определенном порядке+форматирование текста. | ppm85 | Скриптовые языки администрирования Windows | 6 | 29-09-2015 11:29 | |
CMD/BAT - С помощью bat-ника перенести нужное количество строк в одну в текстовом файле | Rz78 | Скриптовые языки администрирования Windows | 7 | 06-06-2015 15:10 | |
CMD/BAT - [решено] Копирование указанного количество блоков из txt файла, начиная с конца | Alexander_88 | Скриптовые языки администрирования Windows | 9 | 30-08-2014 22:16 | |
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. | OSArev | Скриптовые языки администрирования Windows | 2 | 30-01-2011 11:58 | |
CMD/BAT - [решено] Как прочесть из файла .txt только первую строчку текста. | Sdib121 | Скриптовые языки администрирования Windows | 6 | 15-08-2009 14:26 |
|