Не нашел готовой темы. Создал новую.
Такой вопрос. Когда мне нужно обработать все файлы в папке с какой-то командой, то я использую обычную конструкцию FOR - IN - DO
А вот если мне нужно обработать две группы файлов так, что в итоговой команде нужно последовательно соединить файлы из обоих групп - первый с первым, второй со вторым и.т.д.
Как-то это можно же сделать? Или придется уже писать какую-то конструкцию с подстановкой имен/номеров файлов?
Так на пальцах непонятно, как именно комп должен понять, какой именно файл из второй группы относится к файлу первой группы. Просто номер в списке?
Думаю, этого можно достичь, воспользовавшись вспомогательным файлом и ключом /F.
test.cmd:
Если я правильно понял идею, то сперва, получается, нужно этот файл, опять же, сгенерить нужным образом, что возвращает к исходной задачи. Или нет? И, исходя из ответа, двойной цикл значит сделать нельзя?
Тогда, наверное, проще что-то придумать с просто подстановкой имен. Это, правда, уменьшит немного автоматизацию и создаст некоторые ограничения.
Вообще, если подробнее, задача такая. И да, задача не разовая, а регулярная: Есть две папки с группами файлов. Скажем, покадровые анимации. Цели тут могут быть разные - это и соединить отрендеренную отдельно тень, и наложить также срендеренный отдельно слой ambient occlusion, или даже наложить анимрованный геройский флажок на анимированный двеллинг и.т.п
И нужно их обработать каким-то образом, подставляя поочередно программе их имена парами. Причем, в виде отдельных переменных, т.к. синтаксис у итогового скрипта может быть самым разным.
Папка cadre, файлы c_XXX.png
Папка shadow, файлы s_XXX.png
Папка out, файлы frame_XXX.png (результат работы)
XXX - трёхзначный номер: 000, 001, ..., 099, 100, ..., 999
//меньше 10 файлов для обработки
FOR /L %a IN (1,1,9) do convert cadre\c_00%a.png + shadow\s_00%a.png out\frame_00%a.png
//меньше 100 файлов для обработки
FOR /L %b IN (1,1,9) DO FOR /L %a IN (1,1,9) DO convert cadre\c_0%b%a.png + shadow\s_0%b%a.png out\frame_0%b%a.png
//меньше 1000 файлов для обработки
FOR /L %c IN (1,1,9) DO FOR /L %b IN (1,1,9) DO FOR /L %a IN (1,1,9) DO convert cadre\c_%c%b%a.png + shadow\s_%c%b%a.png out\frame_%c%b%a.png
Последний (условный) вариант как-то делал для себя. Рипал игру, а там кадры юнитов и кадры теней были в разных файлах.
Ну т.е. все-таки подстановкой имен. Это я вчера тоже уже сделал. Правда другим способом. И с лидирующими нулями (с которыми всегда Макс рендерит) разобрался иначе.
Делал через цикл "if - set - goto", а с нулями разобрался т.н. паддингом, т.е. отбрасыванием первого регистра путем %num:~-4%, а сам цикл шел начинаясь с 10000.
Но погоди. Ты таки используешь двойной и даже тройной цикл. "FOR /L %b IN (1,1,9) DO FOR /L %a IN (1,1,9) DO convert..."
В этом же и был мой вопрос. Я просто не знал как эта конструкция пишется. Нельзя ли в таком случае просто в первый IN вставить обычный (*.png), а во второй с путем ко второй папке (./path/*.png) ?
Или какая-то проблема возникнет? Сейчас попробую....P.S. А, понял, так нельзя. Он будет не двойной цикл делать, а внутренние циклы, т.е. пытаться каждый с каждым по очереди.
P.S. Фак. Я совсем туплю. Вот что значит пытаться на больную голову делать. В случае если имена в обоих папках одинаковы, то вообще все тупо и не надо генерацией имен заниматься. Можно же просто одним циклом, а второму параметру просто путь подставить. Ну а если имена разные, то уже, видимо, нужно морочится вышеописанными способами. Но все равно удивительно почему нет двойного цикла.
Вечный вопрос про паузу для батника
теперь и не через пинг
@choice /c:° /d ° /t:20 > nul
в секундах
А почему не
@choice /d y /t:20 >nul
потому что y можно и случайно нажать, а знак градуса валиден для команды и в (большинстве) раскладок все-таки отсутствует (а если хочется хардкора, можно чего-нибудь типа старой псевдографики ░, те упыри, которые могут её случайно нажать, пусть получают все, что заслужили)
ну и для /d судя по документации /с таки необходим
вот двоеточие необязательно, можно и просто @choice /c ° /d ° /t:20 > nul
Не, это /d необходим для /t, иначе непонятно, что делать по таймауту.
Edit: а, ясно, указанный в /d символ должен быть один из тех, что в /c. Но по умолчанию же /c yn, так что явный /c необязателен, если дефолт y или n.
Edit2: примеры в справке:
Небольшое вступление:
В последнее время стал меньше читать, но стараюсь больше слушать какой-нибудь полезной информации. Хорошие и интересные подкасты - редкость, но на ютубе довольно много видеолекций, которые можно не смотреть, а в основном - слушать, благо, пока что хожу на работу пешком по довольно тихим местам.
Цель:
Слушать какие-нибудь лекции, презентации, рассказы или обсуждения с Youtube на ходу с телефона. Не то, чтобы мне было жалко траффика, хотя и это тоже, но с аудио банально проще. Не надо опасаться, что вот экран включится или выключится и видео запустится заново, можно удобно проматывать вперед/назад, можно поставить закладку и потом вернуться к этому месту ещё раз и т.д. Правильный аудиоплеер рулит!
Вопрос удобного скачивания с ютуба и закачивания на телефон был решен, но в последнее время ютуб что-то докрутил и любимый FastestTube перестал нормально сохранять в m4a, но другое расширение позволяет удобно скачивать ролики в mp4.
Итого, есть задача:
Хочу сделать возможность извлечения аудиотрека из видеофайла, чаще всего mp4.
Накатал батничек
C:\Iv\Dropbox\Soft\Video\ffmpeg.exe -i "%1" -vn -ar 44100 -ac 2 -ab 192 -f mp3 %~n1.mp3
И прописал его вызов в контекстном меню файлов с расширением mp4, он работает, но получается извлекать музыку только из файлов без пробелов.
Биополимер вместо жгута.mp4 - не работает
БиополимерВместоЖгута.mp4 - работает
Как допилить батник, чтобы он понимал файлы с пробелами? Или есть прога под андроид, которая может качать аудио с ютупа?
Он пытается обработать только первую часть имени до пробела. Т.е. он воспринимает это как два/три и.т.д пришедших параметра, разделенных пробелами. %1 - подставляет первый параметр, %2 - второй и.т.д. %* - подставляет все пришедшие параметры разом.
Тебе нужно либо сразу подавать батнику имя файла в кавычках, но тогда, кажется, нужно убрать кавычки из батника, т.е. писать просто %1 (а иначе, скорее всего, будет две пары кавычек)
Либо вместо "%1" использовать "%*"
Озадачился ещё одним вопросом.
Есть картинка aniForge.png, где в лист собраны несколько (4*3) кадров анимации движения.
Есть батник
Но IM умеет резать на нужное число кусков искоропки!
http://www.imagemagick.org/Usage/crop/#crop_equal
Iv
попробуй использовать проценты в crop
https://www.imagemagick.org/Usage/crop/#crop_percent
Или как феанор советует
Ага, '@' flag сработал, лист распилился на кадры.
Осталось
1. заставить работать команду convert aniForge.png -crop 4x3@ +repage +adjoin out\%d.gif в батнике
convert %1 -crop 4x3@ +repage +adjoin out\0%d.gif - не работает2. заставить нумеровать получающиеся файлы с ведущим нулем,
Если чо, в батниках нужно указывать два % (%% )
приду сегодня или завтра домой, посмотрю, что там у меня пилит хероеслендовские спрайтшиты.
Это я тоже пробовал
Два процента, если имеется в виду параметр for (например, вместо %i надо писать %%i). Если же параметр батника (%1), достаточно одного процента. Имя set-переменной берётся в проценты (%PATH%).
Очередной вопрос: как заменить прозрачный фон в кадрах на белый или серый цвет при сборке превью?
Экспериментировал с
Нужно убрать альфа канал после указания цвета фона -alpha off
mogrify -background white -alpha off %~n1\*.png
Не уверен на счёт правильности выбора темы...
Пытаюсь соорудить некий механизм для обеспечения портативности программ (в основном игр). Скрипт или софтина не важно. Может кто знает такое и я зря изобретаю велосипед? Что должно происходить:
- Копирование папки\папок\файла\файлов, лежащих рядом, по нужным местам;
- Импорт ветки\веток\записи\записей реестра;
- Запуск программы и ожидание пока она завершится;
- Копирование папки\папок\файла\файлов обратно и удаление;
- Экспорт ветки\веток\записи\записей реестра обратно и удаление;
В идеале, позже доработать логику обработки коллизий (на случай если по указанным расположениям уже есть файлы\записи), и что бы процесс работы был скрыт от пользователя.
На данный момент пытаюсь сделать это через bat, завёрнутый в vbs:
vbs будет выполняет роль оболочки, для того что бы скрыть окно консоли, как-то так:
Форум Invision Power Board (http://nulled.cc)
© Invision Power Services (http://nulled.cc)