image.png9 Кб, 669x338
Единого cmd тред /cmd/ Windows 10: New Opera 3627026 В конец треда | Веб
Без головного убора эдишн

Итт предлогаю задавать все вопросы которые связанны с вай-Ъ-кодингом в этойвоистину могущественной и нихуя не понятной среде. ОП начинает тред такой проблемой:

Кнопкодавствую в попытках кодирования ффмпегом многоканального аудио в стерео. Ес-но с полным сохранением имен поэтому сразу нужно обрабатывание ибо файлов много. ПОнял что есть вариант через папку и\или драг-дроп. Проблема такова что скрипт то рабочий нашел, но нихуя моменты а-ля "=!%~", особенно ебучие проценты и флаги которые идут за ним. Пример кода ниже

ECHO OFF :REPEAT
ffmpeg.exe -i %1 -af "pan=stereo|FL<1FL+0.707FC+0.707SL+1.58LFE|FR<1FR+0.707FC+0.707SR+1.58LFE" "%~n1_stereo.flac"

if "%~2"=="" GOTO EXIT
shift
GOTO REPEAT
GOTO REPEAT :EXIT
pause

Как бы основа понятна - базовый синтаксис goto и ffmpeg, но вопрос как блять определить правильно написать это дело под:
-перетаскивание папки на батник, а не файлов в той же директории
-как прописать сохранение кодированных файлов в другую папку
-как определяется приоритетность указания путей в батнике, как они меняются
-почему путь для загружаемого файла в примере указывается через %1 а не %* или %%буква как в лупе
- что значит ебучая абракадабра "%~2"=="" ?
Windows 10: Firefox based 2 3627031
>>026 (OP)
Нахуя? Есть же PowerShell.
Android: Firefox based 3 3627033
Предлагаю завалить ебало с этой ущербной хуйней и дрочить powershell/петухон/да хоть bash в wsl, все лучше чем эта дегенеративная легасиговнина.
Android: Mobile Safari 4 3627046
>>033
неиронично отдаю предпочтение смд с clink, а не повершеллу. в чём конкретно я не прав?
Windows 10: New Opera 5 3627047
Покурил немного справ очники и выяснил что драг-дроп на смд позволяет сразу получать полный путь к файлу.
Далее узнал за нагромождение goto - избежать циклов здесь удалось таким путем:
используется первый goto который начинается с конца объявление repeat поэтому действует спокойное построчное исполнение кода;
затем идет строчка собсна ffmpeg где вероятно через % указывается какой-то "селф" по совместительству путь перетаскиваемого файла, при этом цифра 1 есть неофф. флагом и счетчиком, но не понятно что значит ~n1 в имени создаваемого файла, вероятно флаг, и что значит ~2 в проверке следующего goto;
дальше идет прерывающий goto с непонятной проверкой флага у процента;
затем начала первого goto который будет выполнен если прерывающий второй goto не будет исполнен
а вот назначение последего непонятно, если конечно это очередной вариант цикл-в цикле
Windows 10: Firefox based 6 3627048
>>046
В том, что ты мелкобуквенный мобилкодаун нетакуся, использующий анально-пердольные трюки вместо проверенных и популярных решений.
Android: Mobile Safari 7 3627050
>>048

>я соевая хуета

Windows 10: New Opera 8 3627051
>>047
Поразмартышлил и понял что делает там шифт - одиночный процент есть целью шифта где тот уменьшает на один значение последнего.
Каждый раз цифра будет 1 а когда закончатся файлы то драг-дроп вернет ничего и цифра станет 0 тогда сработает проверка равенста с == и цикл оборвется.
Но что делает последний goto?!
Windows 10: Firefox based 9 3627052
>>050
Я знаю что ты соевая хуета, по повадкам и поведению видно.
Android: Mobile Safari 10 3627053
>>052

>ряяяя нет ты

Windows 10: New Opera 11 3627056
Windows 10: New Opera 12 3627099
Блять покурил еще ту хуйню что я написал, посмотрел на код еще раз и понял что и он работает на половину.
Цикл обрывается после одного файла, при этом конвертируется последний файл который был под курсором; добавляя в конец адрес папки в директории тоже самое.
Продолжаю курить.
Windows 10: New Opera 13 3627122
Опытным путем удалением по одной строчке определено что батник сразу закрывается после кодирования одного файла.
Немного разобрав так называемое спагети из goto пришел к выводу что обойтись можно и одним - один хрен выполняется задача всего один раз и цикл не запускается.

Теперь так:
ECHO OFF :REPEAT
ffmpeg.exe -i %1 -af "pan=stereo|FL<1FL+0.707FC+0.707SL+1.58LFE|FR<1FR+0.707FC+0.707SR+1.58LFE" "%~n1_st.flac"
if ["%~2"]==[] then EXIT else shift
GOTO REPEAT
pause
Windows 10: New Opera 14 3627162
Заебавшись решил проверить что выдает репит если ффмпег заменить на текст

:REPEAT
echo [%1]
echo ["%~n1_st.flac"]
if ["%~2"]==[] then pause else shift
GOTO REPEAT
pause

На выхлопе цикличное повторение строчки под курсором и ее "правленая" версия следом, по кругу
Windows 10: New Opera 15 3627171
Хуйня полнейшая выходит. Почитал еще за goto и оказывается что структура по типу змеи кусающей свой хвост - норма, пиздец.
Т.е. выглядит так чтобы цикл прыжков разрывался также прыжками:
:LOOP - метка основного цикла
if "%~1"=="" goto :END - метка для выхода из цикла
shift
goto :LOOP - метка основного цикла
:END - метка выхода из цикла

И какова была первая ошибка, хоть и не влияющая на первичную работо способность - проебанная метка для выхода из цикла в самом конце
...
shift
GOTO REPEAT
GOTO REPEAT :EXIT - хотя это не точно, предстоит првоверить.

Пока обнаруженная проблема что возможно проебанны директории но где - пока разбираюст
Windows 10: New Opera 16 3627174
Уже теплее, теперь ошибка с тем что "указанная директория не существует и выдает дважды (тещщу на двух треках пока)

:REPEAT
if "%~1"=="" goto :END
cd "%~dp0/ffmpeg.exe" -i "%~1" -af "pan=stereo|FL<1FL+0.707FC+0.707SL+1.58LFE|FR<1FR+0.707FC+0.707SR+1.58LFE" "%~dp0/conv/%~n1.flac"
shift /1
goto :REPEAT
:END
pause
Android: Mobile Safari 17 3627176
>>171
тебе же говорят это легаси, нахуя ты это ковыряешь и ищешь в нем логику?
Чтоб ты понимал, пидор очкастый тебе вот этой хуйни навешал, а сам по молодости бегал на маинфрейме с юниксом свой бейсик дрючил.

Это все пародия на юникс шелл но кривая, косая с непонятно нахуя поменянными символами (наверное ссал что в суд подадут и страховался, даже слеши долбоеб поменял). Открой документацию по башу
https://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-a-bash-script
вставь в wsl
и всё
Windows 10: New Opera 18 3627181
>>026 (OP)
ЙУХУ! Заработало! Итоговый код выглядит так:

set dir=%~dp0
:REPEAT
if "%~1"=="" goto :END
cd "%dir%
ffmpeg.exe -i "%~1" -af "pan=stereo|FL<1FL+0.707FC+0.707SL+1.58LFE|FR<1FR+0.707FC+0.707SR+1.58LFE" "conv\%~n1.flac"
shift /1
goto :REPEAT
:END
pause

Сейчас настрокаю все то что пришлось изменить; огромный кудос ss64.ком!
Windows 10: New Opera 19 3627191
Оказалось что все эти жесты глухонемых у смд - ~%!*^&" - это вполне норм система которую правда нужно задрочить ибо ошибиться легко а еще легче запутаться новичку.
Что касается кода то не знаю пока луп через for лучше был бы или нет, но система с повторами интересна тем что позволяет просто манипулировать переменной... драг дропа. Немного непонятна правда работа команды шифт. Да она позволяет "перелистывать" список переменных от нужной точки, но не зная синтаксиса опасно применить ее.
В остальном так понял основная ебля это пути - конкретно я не сразу вдуплил хотя несколько раз прочел что каждое последующее обращение к н-директории будет на нее заменять ту из которой идет исполнение файла. И на фоне мудреных повторов через ГОТО с килер-шифтом а вдобавок и много флагов которые надо знать - не сразу раздупляешь. Меня так и вовсе ввело в заблуждение ибо консоль сразу закрывалась без ошибок.

В остальном еще подправлю строчку ффмпег, добавлю проверку\создание папки для обработанных файлов и приймусь
курить дальше. Нахуя? А хуй знает, но интересно - спортивно даже
Android: Mobile Safari 20 3627231
>>191

>Оказалось что все эти жесты глухонемых у смд - ~%!*^&"


регулярные выражения же? это не подразумевается читать, это write-only код
Обновить тред
« /s/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее