|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Вырезать начало/ заголовок файла до определённого символа |
|
Любой язык - Вырезать начало/ заголовок файла до определённого символа
|
Ветеран Сообщения: 4625 |
Уважаемые, здравствуйте!
В этой теме, пользователь задавался вопросом замены одной последовательности символов на другую. Там же была предложена утилита sfk, которая мгновенно выполняла запрошенное. В моём случае конечно не принципиально, чтобы использовалась именно данная утилита, полагаю подойдет и powershell-сценарий, но признаться честно объём файлов большой. Описание: Имеется большое количество файлов, которые на протяжении многих лет создавались в одном из "самописных" приложений, которое естественно уже кануло в лету. По факту это *.djvu файл со вставкой в заголовок сведений о сертификате/ подписи. Мне нужно этот заголовок удалить (например все данные до "AT&TFORM") и изменив расширение "превратить" файл в валидный *.djvu для дальнейшего открытия/ просмотра. Может кто располагает готовым решением или подскажет по теме? Образец файла прикрепляю. |
|
Отправлено: 09:56, 03-03-2022 |
Crazy Сообщения: 1232
|
Профиль | Отправить PM | Цитировать А во всех файлах в заголовках одинаковое количество символов? Или там заголовки разные?
И ещё, в конце файла тоже присутствует какая-то информация - она мешать не будет? |
------- Отправлено: 18:11, 04-03-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 4625
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Цитата YuS_2:
|
||
Отправлено: 19:40, 04-03-2022 | #3 |
Crazy Сообщения: 1232
|
Профиль | Отправить PM | Цитировать Цитата NickM:
Ну да ладно. Примерно так: param ( [string]$folder = '.\TEST', [string]$tmpl = 'AT&TFORM' ) function RW-Stream { param ( [Parameter(ValueFromPipeline)] [ValidateNotNullOrEmpty()] $filein, $fileout = 'tmp.tmp', $template ) begin { new-variable -name block -val 524288 $buf = new-object byte[] ($block) } process { $flag = $true $reader = [io.streamreader]::new($filein.fullname) $writer = [io.streamwriter]::new($fileout) new-variable -name tblock -val 1 $tbuf = new-object byte[] ($tblock) while ($reader.basestream.position -lt $reader.basestream.length -and $flag){ $null = $reader.basestream.read($tbuf,0,$tblock) if ([char][int]$tbuf[0] -eq $template[0]){ $pos = $reader.basestream.position - 1 $i,$flag1 = 1,$true while ($flag1 -and $i -lt $template.length){ $null = $reader.basestream.read($tbuf,0,$tblock) if ([char][int]$tbuf[0] -eq $template[$i]){ if ($i -eq $template.length-1){ $flag,$flag1 = $false,$false $reader.basestream.position = $pos } } else {$flag1 = $false} $i++ } } } rv tbuf;rv tblock while ($reader.basestream.position -lt $reader.basestream.length){ $cnt = $reader.basestream.read($buf,0,$block) $writer.basestream.write($buf,0,$cnt) } $reader.dispose();$writer.dispose() $reader.close();$writer.close() # Если создавать новые файлы не требуется, то исходные файлы будут # перезаписаны новыми: #mi $fileout $($filein.fullname) -force # Если необходимо переименование в .djvu, то строка выше должна быть # закомментирована, а последующая раскомментирована. Создаются файлы # с таким же именем, но с расширением djvu. Исходные файлы не изменяются: mi $fileout $($filein.fullname -replace '\..*$','.djvu') -force } } dir $folder -file -rec |rw-stream -templ $tmpl |
|
------- Последний раз редактировалось YuS_2, 05-03-2022 в 17:10. Отправлено: 15:15, 05-03-2022 | #4 |
Ветеран Сообщения: 4625
|
Профиль | Отправить PM | Цитировать Спасибо!
Проверил на образце - заголовок отрезает! Файл в программе просмотра *.djvu открывается корректно. В ближайшие, рабочие, дни запущу сценарий на наборе файлов. |
|
Отправлено: 15:56, 05-03-2022 | #5 |
Crazy Сообщения: 1232
|
Профиль | Отправить PM | Цитировать Цитата NickM:
|
|
------- Отправлено: 17:09, 05-03-2022 | #6 |
Ветеран Сообщения: 4625
|
Профиль | Отправить PM | Цитировать Не стал затягивать и выполнил на наборе из ~97 тыс. файлов - сценарий управился за ~17 минут.
Проверил выборочное открытие файлов - открытие успешное. YuS_2, ещё раз выражаю благодарность! Цитата YuS_2:
Отработал по первому варианту, как Выше и написал - выборочное открытие файлов проблем не выявило. UPD: Но, Я всё же поищу проблемные файлы и напущу на них исправленный вариант сценария. Да, действительно, такие файлы нашлись, и последний вариант сценария обрабатывает их правильно. |
|
Последний раз редактировалось NickM, 05-03-2022 в 17:40. Отправлено: 17:19, 05-03-2022 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Замена символа в строках имеющих определенное начало | TRaMeLL | Скриптовые языки администрирования Windows | 6 | 26-12-2018 23:41 | |
CMD/BAT - Записать название файла в начало текстового файла | krambrige | Скриптовые языки администрирования Windows | 3 | 15-12-2018 17:23 | |
CMD/BAT - [решено] Переименовать папки, удалив всё после определённого символа | dreamscafe | Скриптовые языки администрирования Windows | 1 | 29-06-2018 20:33 | |
Поиск определённого файла на сайте | Sfero_ID | Хочу все знать | 1 | 09-10-2010 08:24 |
|