![]() |
удаление файлов по списку list.txt
всем привет.
есть скрипт, в конце скрипта прописано удаление файлов которые указаны в списке list.txt скрипт пашет, но выдает кучу ошибок в конце в данный момент он выглядит так Код:
@echo off Код:
ошибка в формате параметра чоделатьпомогите |
Потому что у Вас какая-то сборная солянка в коде.
|
отсюда
Код:
@echo off Код:
call отсюда Код:
For /F "delims=" %%A In ('Dir "*.*" /A-D /B') Do (Echo %%~A)>>list.txt |
bidjo,
может так? Код:
for %%a in (*.jpg) do ffmpeg -f concat -safe 0 -r 2 -i %%a -threads 2 -vcodec libx264 -preset veryfast -qp 30 -tune grain -r 1 -framerate 1 30.avi |
не не так. так просто я и сам умею:) надо что бы скрипт отрабатывал через планировщик раз в сутки и удалял только то что в файле. не более. пока он исполняется, могут появится новые файлы, которые не войдут в видео и будут удалены после исполнения скрипта.
|
bidjo, я вас огорчу, но
Код:
For /F "delims=" %%A In ('Dir "*.*" /A-D /B') Do (Echo %%~A)>>list.txt Код:
del *.jpg Код:
del *.* |
bidjo, так дело в том, что у Вас в файле list.txt не просто «файлы», а а) сначала идут записи вида:
Код:
file 'bla-bla-bla1.jpg' |
Цитата:
спасибо за подсказку. Цитата:
в предыдущем варианте скрипт отрабатывает 960 файлов, в папке где их уже 50 и более тысяч. он для этого нужен. а скрипт concate нужен после, того как все устаканится и не будет такой чехарды. Код:
For /F "delims=" %%A In ('Dir "*.*" /A-D /B') Do (Echo %%~A)>>list.txt Цитата:
|
Цитата:
Цитата:
Цитата:
Вот Вам код на PowerShell: Скрытый текст
Код:
Param ( который использует два параметра — путь к целевому каталогу (по умолчанию — текущий каталог) и число файлов в «пачке» (по умолчанию — 100). В указанном каталоге ищутся все jpeg-файлы, группируются по заданному числу файлов в «пачке», для каждой группы имён создаётся файл, который указывается аргументом при вызове ffmpeg.exe, после отработки которого обрабатывается следующая группа файлов до их исчерпания. В конце задаётся вопрос, следует ли удалять обработанные jpeg-файлы (чтобы у Вас была возможность перед их удалением предварительно посмотреть на получившиеся avi-файлы и оценить результат). Пример процесса обработки двадцати шести jpeg-файлов в текущем каталоге, по 10 файлов в пачке: Скрытый текст
![]() Итог обработки: Скрытый текст
![]() |
Цитата:
|
Цитата:
|
есть родные для PoSh типы данных string и int
проверку директории через [System.IO.Directory]::Exists допустим, понять можно - штатные способы "проглотят", например, путь к реестру хотя в целом - это простой конвейер, если что-то не так с директорией, содержимым - сам командлет выдаст ошибку снабжённую всеми необходимыми атрибутами, на языке пользователя . "Плюнуть" на экран красный текст на иностранном языке - это для кого такое "удобство"? Оформляете в виде вызываемого скрипта, но он не формирует события ошибки. Для создания временных файлов есть стандартные механизмы и места, для удаления файлов - тоже. Зачем вместо штатных команд использовать обращения к библиотекам .NET? Синтетическое поле для каждого файла с номером - зачем?! - Они уже в пронумерованном массиве Вместо округления результата деления и отдельный итератор для групп используют целочисленное деления и остаток от целочисленного деления. Не надо явно указывать `r`n - это платформозависимое соглашение, а что PoSh, что ffmpeg работаею и на mac и на linux. Не надо в памяти формировать файлы - пишите сразу строки в файл Пути к ffmpeg самое место в параметре по умолчанию, а не в середине скрипта А вот результат работы ffmpeg как раз должен проверяться - сейчас если он не сможет создать видео (места на диске не хватило), скрипт всё равно бодро рапортует об успехе и удаляет исходные изображения. Наличие выходного файла тоже Вместо велосипеда с PromptForChoice можно просто вызвать Remove-Item с параметром -Confirm. Вы так уверены, что выдавать на экран простыню из 960 имён удалённых файлов - хорошая идея? Если они важны - не лучше ли тогда использовать Write-Output - чтобы можно было их по необходимости передать по конвейеру и т.п.? switch с единственным параметром тоже умиляет |
Busla, спасибо, ясно.
Цитата:
Цитата:
Цитата:
Скрытый текст
![]() Красная портянка бывает и больше. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Скрытый текст
![]() Цитата:
Цитата:
Цитата:
|
Цитата:
Код:
function findex ($arr, $val) { Код:
[array]::indexof($arr.name,'name.ext') Код:
$arr.name.indexof('name.ext') |
YuS_2, боюсь, с группировкой отобранных файлов мне это не особо поможет.
|
Iska,
Да, в код не вчитывался, комментировал только то, что процитировано... В общем, суть задачи пока не разбирал, ничего добавить не могу... вечером, в спокойной обстановке гляну... |
Цитата:
Код:
$aFiles = Get-ChildItem *.jpg -File |
Цитата:
Но, как минимум, тут: Код:
$aFiles = Get-ChildItem -Path "$sSourceFolder\*.*" -File -Include '*.jpg', '*.jpeg', '*.jpe' Эквивалент: Код:
$aFiles = Get-ChildItem -Path "$sSourceFolder\*.*" -File -Include '*.jpg', '*.jpeg', '*.jpe' |
ух как тут жарко:)
спасибо большое за ответы. power shell конечно монструозный что в .bat 10 строк, то в powershell целый том войны и мира один вопрос после формирования файла в list.txt есть куча строк с указанием файлов, из которых формируется видео. выходное имя видео это то, что я задам, можно даже указать время сегодняшнее. а нельзя ли, в качестве имени файла указать первую строчку и последнюю строчку list.txt? допустим в папке лежат фото собачей будкии, а на выходе получилось не N.avi, а Будка злой собаки 01-01-2018_00h01m01s Будка злой собаки 01-01-2018_23h59m01s.avi |
Цитата:
Например, прибавьте или отнимите, скажем, 7 дней к текущей дате в cmd, с учетом разного количества дней в месяцах, а также переход в новый/предыдущий месяц/год... Вот, как это делается на powershell: Код:
(get-date).adddays(7) |
YuS_2, поиск индекса по значению в общем случае плохая затея: неэффективная и нужно быть уверенным в уникальности значений
да и вообще ненужная: кто сказал, что группировать можно только по свойствам объекта? Код:
$oCount = @{ iValue = 0 } Iska, Double - это двоичная дробь и двоичный сдвиг, поэтому отбрасывание дробной части может дать неожиданный результат. |
Цитата:
По коду: с этим-то понятно. Минус такого подхода — в двойной проверке: общий цикл «для всего» и вложенная в него аналогичная проверка для того же условия, либо вложенным циклом, как у Вас (и так — да, красивее), либо простым условием с прерыванием цикла, как обычно делаю я. То бишь, делать — можно, но громоздко. Ладно, когда другого выхода нет (например, в том же WSH), а тут хотелось бы использовать конвеер и группировку. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
эмм простите , а итоговый то скрипт какой?:)
|
Цитата:
Цитата:
|
Ну, вот, как-то так:
Скрытый текст
Код:
Param ( Теперь первый параметр, Path2FFMpeg — путь к ffmpeg.exe (по умолчанию — C:\Program Files\FFmpeg\bin\ffmpeg.exe), второй параметр, SourceFolder — путь к целевому каталогу (по умолчанию — текущий каталог), третий параметр, GroupBy — число файлов в «пачке», из которой формируется видеофайл (по умолчанию — 960). Имена выходных видеофайлов формируются по указанному Вами принципу, нумерацию я оттуда вообще убрал. Например, вызываем скрипт для обработки каталога 0008, находящегося в текущем каталоге, с группировкой файлов по двадцать штук: Скрытый текст
![]() Возможный результат
![]() |
Цитата:
А на счет уникальности - в данном, конкретном случае, всё на месте, в смысле уверенность в этом есть. Цитата:
Цитата:
Цитата:
Цитата:
Код:
man about_Arithmetic_Operators -full [int](5/2) и так тоже можно: Код:
[math]|gm -stat |
Цитата:
Цитата:
|
Цитата:
Код:
[int](7/2) Цитата:
Цитата:
а тот, кто совсем не знаком с .NET не всегда поймёт что написано Цитата:
он вообще может работать с данными, которых ещё нет в природе - подать на вход конвейера вывод датчика температуры и он потом годами будет переводить фаренгейты в градусы, сохранять в csv и слать алармы при критичных значениях применительно к данному случаю - запустить скрипт, увидеть, что работает он уже третий день и досыпать туда ещё вчерашних фоток для склейки (штатная) группировка ставит крест на этой светлой идее: она не знает, что группировка у нас по монотонному итератору, поэтому для анализа грузит в память весь список файлов Iska, поделитесь, пожалуйста: как вы сделали длинный скриншот консоли? |
Цитата:
Причем, округление банкиров. Так сказать: [int]3.5 -eq [int]4.5 Цитата:
Или Вы о чем? Цитата:
|
|
Цитата:
Цитата:
![]() Сказка, просто сказка. Цитата:
Цитата:
Цитата:
Удобная штука. Я перешёл на ShareX с PicPick. Цитата:
|
Цитата:
"Windows PowerShell автоматически выбирает числовой тип платформы .NET" 2. Это да и именно поэтому Ваш вариант [math]::divrem, наиболее красивый... имхо Цитата:
В powershell, например, оно есть, а вот использовать возвращаемый остаток, в данном случае неприемлемо... т.е. поискать его надо в более других доступных местах, да хоть в [math]::truncate - почему нет? |
Цитата:
|
Время: 22:20. |
Время: 22:20.
© OSzone.net 2001-