![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Удалить первый байт в файле |
|
Любой язык - [решено] Удалить первый байт в файле
|
Старожил Сообщения: 150 |
Приветствую!
Задача следующая: нужно удалить первый байт в файле. Этот процесс нужно автоматизировать, поскольку этот байт мне нужно удалить более чем в сотне файлов. Так что если на выходе получится скрипт, который опрашивает директорию с субдиректориями, и все находящиеся в них файлы смещает на один байт вверх, уничтожая этот байт, было бы идеально. Если имена конечных файлов слегка изменятся (например, к имени прибавится цифра 1), это не принципиально. |
|
Отправлено: 21:26, 30-04-2021 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата m0nkrus:
|
|
------- Отправлено: 08:47, 01-05-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 150
|
Профиль | Сайт | Отправить PM | Цитировать YuS_2, не знал про это. Привык, что в cmd в консоль перенести готовый сценарий нельзя...
Ваш скрипт на семерке выдавал такую ошибку: Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "file". строка:1 знак:16 + dir $root -file <<<< -rec|%{ + CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "file". строка:6 знак:16 + dir $root -file <<<< -rec|%{ + CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand |
Отправлено: 08:51, 01-05-2021 | #12 |
fascinating rhythm Сообщения: 6705
|
Профиль | Отправить PM | Цитировать Судя по всему, у вас старый Powershell. Проверяется командой
Его можно обновить до версии 5.1 https://docs.microsoft.com/ru-ru/pow...powershell-7.1 |
------- Отправлено: 08:54, 01-05-2021 | #13 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата m0nkrus:
т.е. в целом, код выглядеть будет так: |
|
------- Отправлено: 08:57, 01-05-2021 | #14 |
Старожил Сообщения: 150
|
Профиль | Сайт | Отправить PM | Цитировать DJ Mogarych, YuS_2, совершенно верно. Версия 2.0. Обновил до 5.1 и скрипты заработали корректно на семерке. Спасибо!
|
Отправлено: 09:06, 01-05-2021 | #15 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата m0nkrus:
param ( [string]$folder = '.\TEST' ) function RW-Stream { param ( [Parameter(ValueFromPipeline)] [ValidateNotNullOrEmpty()] $filein, $fileout = 'tmp.tmp' ) begin { new-variable -name block -val 524288 $buf = new-object byte[] ($block) } process { #measure-command{ $reader = [io.streamreader]::new($filein.fullname) $writer = [io.streamwriter]::new($fileout) $reader.basestream.position = 1 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 #} } } dir $folder -file -rec|rw-stream Корневой каталог сканируется рекурсивно. Целевые файлы заменяют исходные, то бишь копии нигде не создаются, поэтому применять осторожно, если исходные файлы потребуются в неизменном виде. Файл ~250Мб, обрабатывается: TotalSeconds : 7,5637454 Файл ~4,2Гб, обрабатывается: TotalSeconds : 145,7682588 |
|
------- Последний раз редактировалось YuS_2, 04-11-2021 в 20:43. Отправлено: 18:32, 04-11-2021 | #16 |
Старожил Сообщения: 150
|
Профиль | Сайт | Отправить PM | Цитировать YuS_2, рекурсивно получаю ошибку:
Цитата:
|
|
Последний раз редактировалось m0nkrus, 04-11-2021 в 20:01. Отправлено: 19:52, 04-11-2021 | #17 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата m0nkrus:
В общем, там строчку надо удалить было - она была нужна из расчета на то, чтобы в функцию можно было вместо объекта передавать строку с путем... но в варианте с командлетом Get-ChildItem (dir), она не критична и не нужна... - в общем, тут в скрипте я уже исправил |
|
------- Отправлено: 20:49, 04-11-2021 | #18 |
Старожил Сообщения: 150
|
Профиль | Сайт | Отправить PM | Цитировать YuS_2, честно говоря, я слегка в шоке! По скорости обработки этот скрипт по сравнению с прошлым, это как небо и земля. Спасибо огромное!
P.S. А можно на всякий случай еще скрипт со строчкой "$filein = gi $filein"? Когда-нибудь перейду на десятку, а там уже версия PowerShell будет актуальной. |
Последний раз редактировалось m0nkrus, 04-11-2021 в 21:29. Отправлено: 21:18, 04-11-2021 | #19 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата m0nkrus:
Цитата m0nkrus:
Там можно условие добавить с проверкой версии powershell и не удалять её Но, по сути, эта строка работала бы в случае вот такого вызова функции то бишь, без неё вполне можно обойтись, просто в параметр вызова не давать строку, а сразу объект, например так: и всё будет функционировать без этой строки... |
||
------- Отправлено: 21:49, 04-11-2021 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Удалить все метаданные в файле | shadowbat | Скриптовые языки администрирования Windows | 0 | 03-03-2020 15:49 | |
CMD/BAT - [решено] Удалить первый символ из строки | Darkar25 | Скриптовые языки администрирования Windows | 4 | 06-04-2019 11:59 | |
CMD/BAT - [решено] удалить файл от 0 до 100 байт | Freddy1984 | Скриптовые языки администрирования Windows | 15 | 14-06-2017 16:05 | |
Любой язык - [решено] Удалить последний байт в файле | pzh2393 | Скриптовые языки администрирования Windows | 10 | 06-12-2014 19:28 | |
[решено] Изменить байт в файле по смещению. | semiono | AutoIt | 2 | 29-08-2010 22:57 |
|