![]() |
Удалить первый байт в файле
Приветствую!
Задача следующая: нужно удалить первый байт в файле. Этот процесс нужно автоматизировать, поскольку этот байт мне нужно удалить более чем в сотне файлов. Так что если на выходе получится скрипт, который опрашивает директорию с субдиректориями, и все находящиеся в них файлы смещает на один байт вверх, уничтожая этот байт, было бы идеально. Если имена конечных файлов слегка изменятся (например, к имени прибавится цифра 1), это не принципиально. |
Как-то так (pwsh.exe)
Код:
foreach ($file in (Get-Childitem -File -Recurse)) |
Foreigner, я совсем не рублю в PowerShell. Попробовал создать скрипт *.ps1, куда записал эти строки. Поместил скрипт в папку с файлами и запустил. Скрипт выдал ошибку и закрылся.
Что я сделал не так? |
Цитата:
Вставьте в начало скрипта Код:
cd "путь к нужной папке" |
Цитата:
Цитата:
Код:
foreach ($file in (Get-Childitem -File -Recurse)) У меня не было возможности проверить этот. |
Цитата:
Код:
$root = 'd:\test' |
Наверное надо было уточнить... Пробую все это делать на семерке. Если нужно обязательно на десятке, то скажите, переключусь на нее.
Все скрипты вываливаются с ошибкой. С какой, сказать не могу, так как консольное окно сразу закрывается. Только и успеваю увидеть красный цвет надписи. С файлами в папке ничего не происходит. Еще раз прошу прощения за свою дурость, но с PowerShell я ранее дел не имел. |
Коллеги, судя по:
Цитата:
|
Iska, насколько я помню, в свое время я давал разрешение командой Set-ExecutionPolicy Unrestricted. Сейчас на всякий случай повторил. Результат не изменился...
|
Перешел на десятку. Скрипт ниже сработал, но не до конца. Не смог обработать файлы во вложенных папках. Выдал ошибку. В корневой для скрипта директории все обработал.
Код:
cd d:\test А вот скрипт, что представлен ниже, выдал тот результат, что мне нужно! Код:
$root = 'd:\test' Тему считаю исчерпанной. |
Цитата:
|
YuS_2, не знал про это. Привык, что в cmd в консоль перенести готовый сценарий нельзя...
Ваш скрипт на семерке выдавал такую ошибку: Код:
Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "file". |
Судя по всему, у вас старый Powershell. Проверяется командой
Код:
host https://docs.microsoft.com/ru-ru/pow...powershell-7.1 |
Цитата:
Код:
|?{!$_.PSIsContainer} Код:
$root = 'd:\test' |
DJ Mogarych, YuS_2, совершенно верно. Версия 2.0. Обновил до 5.1 и скрипты заработали корректно на семерке. Спасибо!
|
Цитата:
Код:
param ( Корневой каталог сканируется рекурсивно. Целевые файлы заменяют исходные, то бишь копии нигде не создаются, поэтому применять осторожно, если исходные файлы потребуются в неизменном виде. Файл ~250Мб, обрабатывается: TotalSeconds : 7,5637454 Файл ~4,2Гб, обрабатывается: TotalSeconds : 145,7682588 |
YuS_2, рекурсивно получаю ошибку:
Цитата:
|
Цитата:
В общем, там строчку надо удалить было Код:
$filein = gi $filein - в общем, тут в скрипте я уже исправил |
YuS_2, честно говоря, я слегка в шоке! По скорости обработки этот скрипт по сравнению с прошлым, это как небо и земля. Спасибо огромное!
P.S. А можно на всякий случай еще скрипт со строчкой "$filein = gi $filein"? Когда-нибудь перейду на десятку, а там уже версия PowerShell будет актуальной. |
Цитата:
Цитата:
Код:
$reader = [io.streamreader]::new($filein.fullname) Но, по сути, эта строка работала бы в случае вот такого вызова функции Код:
rw-stream "d:\folder\file.ext" Код:
$obj = gi "d:\folder\file.ext" |
Время: 17:29. |
Время: 17:29.
© OSzone.net 2001-