|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - удаление файлов по списку list.txt |
|
CMD/BAT - удаление файлов по списку list.txt
|
Новый участник Сообщения: 14 |
всем привет.
есть скрипт, в конце скрипта прописано удаление файлов которые указаны в списке list.txt скрипт пашет, но выдает кучу ошибок в конце в данный момент он выглядит так @echo off setlocal 1>nul chcp 1251 cd C:\vs (for %%i in (*.jpg) do @echo file '%%i') > list.txt ffmpeg -f concat -safe 0 -r 2 -i list.txt -threads 2 -vcodec libx264 -preset veryfast -qp 30 -tune grain -r 1 -framerate 1 30.avi call For /F "delims=" %%A In ('Dir "*.*" /A-D /B') Do (Echo %%~A)>>list.txt For /f "tokens=*" %%i in (list.txt) do attrib -a %%i attrib -a %0 del /aa /q /f *.* del list.txt pause и ошибок этих столько, сколько файлов я обрабатываю. а их несколько тысяч. в итоге скрипт отрабатывает за 1 минуту грубо говоря и 5 минут срет в лог ошибку формата параметра. чоделатьпомогите |
|
Отправлено: 20:30, 07-08-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Потому что у Вас какая-то сборная солянка в коде.
|
Отправлено: 21:54, 07-08-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать отсюда
@echo off setlocal 1>nul chcp 1251 cd C:\vs (for %%i in (*.jpg) do @echo file '%%i') > list.txt ffmpeg -f concat -safe 0 -r 2 -i list.txt -threads 2 -vcodec libx264 -preset veryfast -qp 30 -tune grain -r 1 -framerate 1 30.avi следующая операция отсюда For /F "delims=" %%A In ('Dir "*.*" /A-D /B') Do (Echo %%~A)>>list.txt For /f "tokens=*" %%i in (list.txt) do attrib -a %%i attrib -a %0 del /aa /q /f *.* del list.txt pause |
Отправлено: 09:27, 08-08-2018 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:20, 08-08-2018 | #4 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать не не так. так просто я и сам умею
![]() |
|
Отправлено: 21:35, 08-08-2018 | #5 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:23, 08-08-2018 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать bidjo, так дело в том, что у Вас в файле list.txt не просто «файлы», а а) сначала идут записи вида:
и б) затем в нём же идут записи уже просто всех подряд файлов. Потому я и писал, что у Вас там сборная солянка в коде. Понятно, зачем собираются записи о *.jpg файлах в указанном выше виде — для последующей обработки их ffmpeg.exe. Но непонятно, зачем туда же потом дописываются записи обо всех подряд файлах. На кой шут для удаления задействуется архаичная и в целом порочная механика атрибуции (причём отдельной строкой — для самого пакетного файла ![]() |
Отправлено: 03:01, 09-08-2018 | #7 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Цитата Busla:
спасибо за подсказку. Цитата Iska:
в предыдущем варианте скрипт отрабатывает 960 файлов, в папке где их уже 50 и более тысяч. он для этого нужен. а скрипт concate нужен после, того как все устаканится и не будет такой чехарды. For /F "delims=" %%A In ('Dir "*.*" /A-D /B') Do (Echo %%~A)>>list.txt For /f "tokens=*" %%i in (list.txt) do attrib -a %%i attrib -a %0 del /aa /q /f *.* ![]() Цитата Iska:
|
|||
Последний раз редактировалось bidjo, 09-08-2018 в 06:52. Отправлено: 06:02, 09-08-2018 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата bidjo:
Цитата bidjo:
Цитата bidjo:
Вот Вам код на PowerShell: Скрытый текст
Param ( [System.String]$sSourceFolder = (Convert-Path -Path '.'), [System.Int32]$iLimit = 100 ) if([System.IO.Directory]::Exists($sSourceFolder)) { do { $sFileList = [System.IO.Path]::Combine($sSourceFolder, [System.IO.Path]::GetRandomFileName()) } until(-not [System.IO.File]::Exists($sFileList)) $aFiles = Get-ChildItem -Path "$sSourceFolder\*.*" -File -Include '*.jpg', '*.jpeg', '*.jpe' if($aFiles.Count -gt 0) { $i = 0 foreach($oFile in $aFiles) { Add-Member -InputObject $oFile -NotePropertyName Number -NotePropertyValue $i $i++ } $aFiles | Group-Object -Property { [Math]::Floor([System.Int32]$_.Number / $iLimit) } | ForEach-Object -Process { $iListFileNumber = ([System.Int32]$_.Name) + 1 $iFilesCount = $_.Count $_.Group | ForEach-Object -Begin { $sContent = '' } -Process { $sContent += "file '$($_.Name)'`r`n" } -End { Out-File -InputObject $sContent -FilePath $sFileList -Encoding "Default" -NoNewline Start-Process ` -FilePath 'C:\Program Files\FFmpeg\bin\ffmpeg.exe' ` -ArgumentList "-y -f concat -safe 0 -r 2 -i $([System.IO.Path]::GetFileName($sFileList)) -threads 2 -vcodec libx264 -preset veryfast -qp 30 -tune grain -r 1 -framerate 1 Output$($iListFileNumber.ToString("0000")).avi" ` -WorkingDirectory $sSourceFolder ` -NoNewWindow -Wait Write-Host "$iFilesCount file(s) splitted into [Output$($iListFileNumber.ToString("0000")).avi]." -ForegroundColor Green } } [System.IO.File]::Delete($sFileList) switch($host.UI.PromptForChoice("Delete files?", "Delete all splitted jpeg files?", [System.Management.Automation.Host.ChoiceDescription[]] @("&Yes", "&No"), 1)) { 0 { foreach($oFile in $aFiles) { $oFile.Delete() Write-Host "File [$($oFile.Name)] deleted." } Write-Host "Total $($aFiles.Count) file(s) deleted." } 1 { # Nothing to do } } } else { Write-Host "Can't find any jpeg files in source folder [$sSourceFolder], nothing to do." -ForegroundColor Green } } else { Write-Host "Can't find source folder [$sSourceFolder]." -ForegroundColor Red } который использует два параметра — путь к целевому каталогу (по умолчанию — текущий каталог) и число файлов в «пачке» (по умолчанию — 100). В указанном каталоге ищутся все jpeg-файлы, группируются по заданному числу файлов в «пачке», для каждой группы имён создаётся файл, который указывается аргументом при вызове ffmpeg.exe, после отработки которого обрабатывается следующая группа файлов до их исчерпания. В конце задаётся вопрос, следует ли удалять обработанные jpeg-файлы (чтобы у Вас была возможность перед их удалением предварительно посмотреть на получившиеся avi-файлы и оценить результат). Пример процесса обработки двадцати шести jpeg-файлов в текущем каталоге, по 10 файлов в пачке: Скрытый текст
![]() Итог обработки: Скрытый текст
![]() |
|||
Отправлено: 07:33, 09-08-2018 | #9 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 11:00, 09-08-2018 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Выборка и txt по списку в txt файле | cyberp1983 | Скриптовые языки администрирования Windows | 5 | 24-05-2018 20:27 | |
CMD/BAT - Общий размер каталогов по списку в TXT | surgutfred | Скриптовые языки администрирования Windows | 8 | 11-12-2017 08:31 | |
CMD/BAT - Удаление файлов по списку | Freddy1984 | Скриптовые языки администрирования Windows | 11 | 04-05-2017 08:36 | |
CMD/BAT - [решено] Поиск файлов в поддиректориях по списку из txt и перемещение | Sub-Zero | Скриптовые языки администрирования Windows | 15 | 27-03-2017 12:58 | |
CMD/BAT - Удаление файлов и папок по списку с выводом результата в файл | Sub-Zero | Скриптовые языки администрирования Windows | 0 | 08-12-2015 23:12 |
|