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

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

Ответить
Настройки темы
CMD/BAT - [решено] Крашится Bat после Else. Пытаюсь сделать переключатель параметра.

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


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

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


Изменения
Автор: dbillika
Дата: 18-01-2019
Если сугубо банально, то оно работает в упрощенном виде. И работает идеально.
Код: Выделить весь код
set x=900
set w=
:1
cls 
echo bla-bla-bla u select to: %x%
echo %w%
echo ============
choice /c 12 /n
if %ErrorLevel%==1 (if %x%==0 (set x=1 & set w=666 & goto 1) else set x=0 & set w=555 & goto 1)
if %ErrorLevel%==2 (if %x%==2 (set x=3 & goto 1) else set x=2 & goto 1)
goto 1
Но когда я дошел до своего проекта, оно крашится. И понять почему я не в силах. Возможно я ошибаюсь в синтаксисе, но где именно - не понимаю. Я пробовал это записывать по разному(else, else if. через goto и if в отдельных строках. всё что мог - перебрал).
Проблемная строка:
Код: Выделить весь код
if %ErrorLevel%==9 (if %vat%==обычный (set vat=только аудио & set va=--extract-audio --audio-format mp3 --audio-quality & cls & goto Гменю) else if %vat%==только аудио (set vat=обычный & set va=88 & cls & goto Гменю))
Смысл сего - переключение 2х параметров одной(двух) переменной в меню кликом 1й кнопы.

Отправлено: 14:06, 18-01-2019

 

Аватара для YuS_2

Crazy


Contributor


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

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


Цитата dbillika:
Голова кипит жестко. »
Если вместо того, чтобы разобраться с синтаксисом, копировать сообщения на разные форумы, а потом пытаться вникнуть в ответы... мозг взорвется, а не только закипит


Цитата dbillika:
Если в IF переменную указывать в кавычках: if "%x%" проблем становится еще больше. »
Никаких проблем не будет, если запомнить, что в условном блоке сравниваемые элементы в виде текста, лучше помещать в кавычки, а числа надо сравнивать наоборот, без кавычек:
Код: Выделить весь код
if "это текст"=="это текст" (echo Yes)
if "2 3 4"=="2 3 4" (echo И это текст)
if 2 leq 5 (echo А это числа)
if 555==555 (echo И это числа)
Цитата dbillika:
x="мама мыла раму", чтобы она имела значение: мама мыла раму без кавычек и пробелов »
без кавычек:
Код: Выделить весь код
set "x=мама мыла раму"
но вот без пробелов... это в каком месте?
Например, если надо уничтожить все пробелы:
Код: Выделить весь код
set "x=мама мыла раму"
echo [%x: =%]
Цитата dbillika:
Но если она имеет значение без кавычек, то оператор if его забракует: if x=мама мыла раму - будет ошибкой. »
с чего бы это, если соблюдать синтаксис?
Код: Выделить весь код
set "x=мама мыла раму"
if "%x%"=="мама мыла раму" echo Yes

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:09, 18-01-2019 | #11



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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата megaloman:
Надо »
Это да, но это-то было опечаткой, которая, кстати, сразу же была исправлена...

-------
scio me nihil scire. Ѫ


Отправлено: 20:17, 18-01-2019 | #12


Ветеран


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

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


Цитата dbillika:
Как сказать переменной, что она: x="мама мыла раму", чтобы она имела значение: мама мыла раму без кавычек и пробелов, когда подставляется в любое место в коде? Но если она имеет значение без кавычек, то оператор if его забракует: if x=мама мыла раму - будет ошибкой. »
вот разные варианты, нельзя сказать что среди них есть правильные и неправильные, для каждой задачи может быть по-разному, но вот общепринятые и логичные и работающие практически для любого случая есть. А в этом коде сработают только те в которых в условии ТОЧНО совпадут левая и правая части:
Код: Выделить весь код
@echo off
set "x1=мама мыла раму"
set x2="мама мыла раму"
set x3=мама мыла раму
set "x4="мама мыла раму""
::---------------------------------
echo set "x1=мама мыла раму"
echo set x2="мама мыла раму"
echo set x3=мама мыла раму
echo set "x4="мама мыла раму""
echo.

call :#1 "%x1%" "%x2%" "%x3%" "%x4%"
call :#2 "%x1%" "%x2%" "%x3%" "%x4%"
call :#3 "%x1%" "%x2%" "%x3%" "%x4%"
call :#4 "%x1%" "%x2%" "%x3%" "%x4%"
echo -------------------------------------------
pause>nul& exit

:#1
 echo -------------------------------------------
 echo if "%x1%"=="%~1"
 echo if "%x2%"=="%~1"
 echo if "%x3%"=="%~1"
 echo if "%x4%"=="%~1"
exit /b

:#2
 echo -------------------------------------------
 echo if "%x1%"=="%1"
 echo if "%x2%"=="%1"
 echo if "%x3%"=="%1"
 echo if "%x4%"=="%1"
exit /b

:#3
 echo -------------------------------------------
 echo if %x1%==%~1
 echo if %x2%==%~1
 echo if %x3%==%~1
 echo if %x4%==%~1
exit /b

:#4
 echo -------------------------------------------
 echo if %x1%==%1
 echo if %x2%==%1
 echo if %x3%==%1
 echo if %x4%==%1
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:24, 18-01-2019 | #13


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


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

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


Хоспади... Триклятые ковычки!
Спасибо megaloman, это именно оно. Какими словами это нужно было сказать гуглу, чтобы он понял меня - не представляю.

Ну вообщем, если интересно, я по крупицам собираю интерфейс управления ffmpeg и youtube-dl. Из знаний - дедукция и поверхностный Pascal школьных лет..
За пол года удалось настрочить это чудо(внутри много набросков и сохраненных из разных источников примеров, чтобы слепить всё воедино):
Код: Выделить весь код
@chcp 1251 & cls & @echo off

::установка переменных
cd %userprofile%/desktop/ffmpeg
set цикл==for %%a in ("in\*.*") do (
set crf=23
set va=
set vat=видео+аудио
set scale=720
set format=mkv
set reverse=
:Гменю
echo	=================================================================
echo	[1]-MKV с рекомендуемыми настройками для Youtube (x264)
echo	[2]-Ручные настройки кодирования
echo	[3]-WEBM
echo	[4]-AAC
echo	[5]-GIF
echo	[6]-mp4
echo	-----------------------------------------------------------------
echo	-----------------------------------------------------------------
echo	[7]-Скачать видео по ссылке (Можно использовать ссылку на плейлист Youtube. Скачаются все видео из плейлиста)
echo	[8]-Скачать видео списоком  (Взависимости от сайта срок жизни ссылок варьируется от 1 часа до 1 дня.)
echo	[9]-Переключить режим скачивания (видео+аудио/аудио). Сейчас активен режим: %vat%

echo	[0]-Выход
echo	=================================================================

choice /c 1234567890 /m "Нажми на клавиатуре клавишу, согласно пункту меню:"
if %ErrorLevel%==1 (goto forYoutube)
if %ErrorLevel%==2 (goto ручныенастройки)
if %ErrorLevel%==3 (goto WEBM)
if %ErrorLevel%==4 (goto AAC)
if %ErrorLevel%==5 (goto GIF)
if %ErrorLevel%==6 (goto mp4)
if %ErrorLevel%==7 (goto )
if %ErrorLevel%==8 (goto )
if %ErrorLevel%==9 (
 if "%vat%"=="только аудио" (
  set "vat=обычный"
  set "va=--extract-audio --audio-format mp3 --audio-quality"
  cls
  goto Гменю
 ) else (
  set "vat=только аудио"
  set "va=null"
  cls
  goto Гменю
))
if %ErrorLevel%==10 (exit)
if %ErrorLevel%==11 (goto end)

:ручныенастройки
cls
echo 	Качествоодирования. (17-35)где 17-лучшее.
echo	=================================================================
echo	[1]-Текущее качество:[%crf%]
echo	[2]-Текущяя ширина:[%scale%]
echo	[3]-Текущий формат:[%format%]
echo	[4]-Начать кодирование.
echo	[0]-Отмена
echo	=================================================================
choice /c 12340 
if /I %errorlevel%==1 (set /p crf="Введи качество от 17 до 35.(чем больше, тем качественнее):" & goto ручныенастройки)
if /I %errorlevel%==2 (set /p scale="Введи ширину в пикселях (360, 720, 1080):" & goto ручныенастройки)
if /I %errorlevel%==3 (set /p format="введите формат mkv, mp4, webm...")
if /I %errorlevel%==4 (%цикл% ffmpeg -y -i "%%a" -vf yadif,scale=%scale%:-2 -c:v libx264 -preset slow -crf 20 -c:a aac -b:a 256k "out\%%~nacustom.mkv" ) & goto end)
if /I %errorlevel%==5 (cls & goto Гменю)
goto end


:кодировка
cls
:: Меню "Кодирование"
echo ###############################################################
echo # 1. Lля Youtube.
echo # 2. Добавить логотип (закинуть в корневую папку файл с именем logo.png)
echo # 3. .......
echo # 4. .......
echo ###############################################################
set /p x="ввидите цифрцу:_"
if /I %x%==1 (goto forYoutube)
if /I %x%==2 (goto логотип)

:forYoutube
%цикл%ffmpeg -y -threads %NUMBER_OF_PROCESSORS% -i "%%a" -vf yadif -c:v libx264 -preset slow -profile:v high -crf 18 -coder 1 -pix_fmt yuv420p -movflags +faststart -g 30 -bf 2 -c:a aac -b:a 384k -profile:a aac_low "out/%%~na.mkv" -hide_banner)
goto end

:логотип
cls
if /I %x%==2 %цикл%
ffmpeg -i input.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=main_w-overlay_w-20:main_h-overlay_h-20" result.mp4
)) goto end



:GIF
%цикл% ffmpeg -y -i "%%a" -vf scale=320:-1 -r 10 "out\%%~na.gif" )
goto end



rem ###### MKV
if /I %x%==mkv (
for %%a in ("in\*.*") do (
ffmpeg -i "%%a" -c:v libx264 -preset slow -crf 22 -x264-params keyint=123:min-keyint=20 -c:a copy "out\%%~na.%x%"
)
)
goto end

:webm
%цикл% ffmpeg -y -i "%%a" -c:v libvpx-vp9 -quality good -b:v 2M "out\%%~na.webm" )
goto end

:mp4
%цикл% ffmpeg -y -i "%%a" -vf yadif,scale=%scale%:-2 -c:v libx264 -preset slow -crf 20 -c:a aac -b:a 256k "out\%%~natest.mkv" )
goto end

rem ###### WEBP
if /I %x%==webp (
for %%a in ("in\*.*") do (
ffmpeg -y -i "%%a" -vcodec libwebp -lossless 1 -q:60 -preset default -loop 1 -an -vsync 0 "out\%%~na8 веб П.%x%"
)
)
goto end
:mp3
if /I %x%==mp3 (
for %%a in ("in\*.*") do (
ffmpeg -y -i "%%a" "out\%%~na.%x%"
)
)
goto end

:: ######## Начало скаччивания
:Поссылке
set /p url="Вставь скопированную ссыль (ctrl+v): "
ffmpeg -y -i "%url%" -c: v libx265 -c: copy -flags + global_header "out\%time%-%date%.mp4"
rem старая настройка ffmpeg -y -i "%url%" -vn -ar 44100 -ac 2 -ab 192k -f mp3 "out\%time%-%date%.mp4"
if errorlevel 1 youtube-dl -o "out/%%(title)s.%%(ext)s" -f best "%url%"
rem ffplay "out/%(title)s.%(ext)s"

rem cls
goto end
rem ####### Конец скачивания

rem ####### Cкачать по ссылке отрывок
set /p url="Вставь скопированную ссыль (ctrl+v):______"
set /p ss="Введи начало записи вида 1:10:20 (1час:10минут:20секунд):_______"
set /p t="Введи продолжительность записи вида 0:00:20 (Скачается 20):_______"
ffmpeg -ss %ss% -i %url% -t %t% -c:v copy -bsf:a aac_adtstoasc "out\%date%-%time%.mp4"
goto end
rem ####### конец скачивания

:4
youtube-dl -o "out/%%(title)s-%%(id)s-%%(upload_date)s-%date%-%time%.%%(ext)s" -c --batch-file z-----list-youtube.txt
goto end
rem ####### Конец скачивания


:: Завершение программы
:end
if %errorlevel%==1 (pause & cls & goto Гменю)
echo  & start out & cls

echo			*****************************
echo 			*-----РАБОТА ЗАВЕРШЕНА.-----*
echo			*ОТКРЫТА ПАПКА С РЕЗУЛЬТАТОМ*
echo			*-----РАБОТА ЗАВЕРШЕНА.-----*
echo			*****************************
goto Гменю


::заготовка.
%цикл% ffmpeg %in% -vf %vf1%,%vf2%,%vf3%    %out%)

:: двухпроходное кодирование v9 EXAPLE
ffmpeg -i <source> -c:v libvpx-vp9 -pass 1 -b:v 1000K -threads 1 -speed 4 \
  -tile-columns 0 -frame-parallel 0 \
  -g 9999 -aq-mode 0 -an -f webm /dev/null


ffmpeg -i <source> -c:v libvpx-vp9 -pass 2 -b:v 1000K -threads 1 -speed 0 \
  -tile-columns 0 -frame-parallel 0 -auto-alt-ref 1 -lag-in-frames 25 \
  -g 9999 -aq-mode 0 -c:a libopus -b:a 64k -f webm out.webm
Ребята спасибо. Я, как бы сказать, работаю и времени не так много на полноценное изучение. Досканальное изучение. Меня хватает ровно на столько, на сколько хватает. В силу своих возможностей по тихотьку и изучаю. Знаю что такое гугл. Рылся и роюсь до сих пор в нэте в изучении. Читал мануалы и русские, и английские. Пытаюсь вчитываться, но много трудных по смыслу слов, понятий. Всё это интересно и заставляет извилины шевелиться. Я сижу за этим делом по часу в день, а то и в неделю. Вот сегодня было очень интересно. Спасибо.

Последний раз редактировалось dbillika, 18-01-2019 в 20:36.


Отправлено: 20:27, 18-01-2019 | #14



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Загрузка - [решено] Windows 10 крашится после выхода из гибридного сна, холодный старт - нормальный Wusa Microsoft Windows 10 17 07-08-2016 12:41
После изменения любого параметра в Asus GPU tweak комп уходит в перезагрузку drkrol Непонятные проблемы с Железом 2 20-07-2016 22:37
CMD/BAT - [решено] Путь к текущей папке CMD после передачи параметра Dragokas Скриптовые языки администрирования Windows 1 16-01-2012 18:44
Загрузка - [решено] После изменения в BCD параметра nx (noexecute) WINDOWS не загружается Mike_Onkyo Microsoft Windows 7 5 29-12-2011 10:50
Из образа ERDC.iso пытаюсь сделать загрузочную флешку Flooper Автоматическая установка Windows 2000/XP/2003 2 01-04-2011 12:19




 
Переход