Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - удаление файлов по списку list.txt

Ответить
Настройки темы
CMD/BAT - удаление файлов по списку list.txt

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


всем привет.
есть скрипт, в конце скрипта прописано удаление файлов которые указаны в списке 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
после отрабатывания скрипта, он все за собой чистит но в cmd ошибки
Код: Выделить весь код
ошибка в формате параметра
и ошибок этих столько, сколько файлов я обрабатываю. а их несколько тысяч. в итоге скрипт отрабатывает за 1 минуту грубо говоря и 5 минут срет в лог ошибку формата параметра.
чоделатьпомогите

Отправлено: 20:30, 07-08-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Потому что у Вас какая-то сборная солянка в коде.

Отправлено: 21:54, 07-08-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить 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
до сюда оно перемещается по cd , создает текстовый файл и по беря из него названия файлов, склеивает их в видео

Код: Выделить весь код
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
до сюда код спжен с просторов oszone написан для подчищения файлов после склеивания их в видосик.

Отправлено: 09:27, 08-08-2018 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


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
del *.jpg
pause

Отправлено: 17:20, 08-08-2018 | #4


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


не не так. так просто я и сам умею надо что бы скрипт отрабатывал через планировщик раз в сутки и удалял только то что в файле. не более. пока он исполняется, могут появится новые файлы, которые не войдут в видео и будут удалены после исполнения скрипта.

Отправлено: 21:35, 08-08-2018 | #5


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


bidjo, я вас огорчу, но
Код: Выделить весь код
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
идентично не то что
Код: Выделить весь код
del *.jpg
а даже
Код: Выделить весь код
del *.*
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:23, 08-08-2018 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


bidjo, так дело в том, что у Вас в файле list.txt не просто «файлы», а а) сначала идут записи вида:
Код: Выделить весь код
file 'bla-bla-bla1.jpg'
file 'bla-bla-bla2.jpg'
…
file 'bla-bla-blaXXX.jpg'
и б) затем в нём же идут записи уже просто всех подряд файлов. Потому я и писал, что у Вас там сборная солянка в коде. Понятно, зачем собираются записи о *.jpg файлах в указанном выше виде — для последующей обработки их ffmpeg.exe. Но непонятно, зачем туда же потом дописываются записи обо всех подряд файлах. На кой шут для удаления задействуется архаичная и в целом порочная механика атрибуции (причём отдельной строкой — для самого пакетного файла ). В предыдущем варианте (Любой язык - создание файла со списком файлов в папке) Вам требовалось собирать имена файлов пачками (дескать, ибо дюже много зараз), здесь же они собираются чохом — как понимать?
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:01, 09-08-2018 | #7


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Busla:
я вас огорчу, но »
и верно. не тестил на все файлы.
спасибо за подсказку.

Цитата Iska:
так дело в том, что у Вас в файле list.txt не просто «файлы», а а) сначала идут записи вида:
и б) затем в нём же идут записи уже просто всех подряд файлов. Потому я и писал, что у Вас там сборная солянка в коде. Понятно, зачем собираются записи о *.jpg файлах в указанном выше виде — для последующей обработки их ffmpeg.exe. Но непонятно, зачем туда же потом дописываются записи обо всех подряд файлах. На кой шут для удаления задействуется архаичная и в целом порочная механика атрибуции (причём отдельной строкой — для самого пакетного файла ). В предыдущем варианте (Любой язык - создание файла со списком файлов в папке) Вам требовалось собирать имена файлов пачками (дескать, ибо дюже много зараз), здесь же они собираются чохом — как понимать? »
туда не записываются файлы все подряд, ток .jpg
в предыдущем варианте скрипт отрабатывает 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:
причём отдельной строкой — для самого пакетного файла [/post]
это сделано специально, что бы скрипт подчищал за собой.

Последний раз редактировалось bidjo, 09-08-2018 в 06:52.


Отправлено: 06:02, 09-08-2018 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата bidjo:
туда не записываются файлы все подряд, »
А это:
Цитата bidjo:
For /F "delims=" %%A In ('Dir "*.*" /A-D /B') Do (Echo %%~A)>>list.txt »
что тогда?


Цитата bidjo:
в предыдущем варианте скрипт отрабатывает 960 файлов, в папке где их уже 50 и более тысяч. он для этого нужен. а скрипт concate нужен после, того как все устаканится и не будет такой чехарды. »
А какая разница? Я лично не вижу никакой, что пятьдесят файлов обработать, что пятьдесят тысяч, что пятьдесят миллионов, алгоритм один и тот же.

Вот Вам код на 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
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Iska:
Вот Вам код на PowerShell »
зачем вы пишите такой лютый трэш и угар?

Отправлено: 11:00, 09-08-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - удаление файлов по списку list.txt

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход