проблема с использованием подстроки, чтобы увидеть, содержит ли строка подстроку в командном файле - PullRequest
1 голос
/ 20 февраля 2020

Я новичок в партии и обнаружил проблему, которую не могу решить. пакетный файл - это всего лишь небольшой скрипт, который делает использование youtube-dl (инструмент командной строки для загрузки видео с youtube) более практичным (папка youtube-dl.exe находится в папке PATH)

setlocal enableextensions enabledelayedexpansion
set /p url=url : 
set /p qual="quality (360/720 = 1/0) : "
if %qual%==0 (
    set qual=22
) else (
    set qual=18
)
cd C:\Users\theo\Videos
if not %url:&list=%==%url% (
    set /p v="video or playlist ? (V/P)"
    if %v%==P (
        youtube-dl.exe -f %qual% --yes-playlist "%url%"
    ) else (
        youtube-dl.exe -f %qual% --no-playlist "%url%"
    )
) else (
    youtube-dl.exe -f %qual% --no-playlist "%url%"
)
endlocal
cmd /k 

окно cmd мгновенно закрывается при достижении второго оператора if, и я просто не могу понять, в чем дело!

РЕДАКТИРОВАТЬ: решение Джеба сработало ^^

1 Ответ

0 голосов
/ 20 февраля 2020

Всегда заключайте переменные в операторы IF.
Это необходимо по двум причинам.

  1. Это позволяет избежать синтаксических ошибок, когда переменная пуста, содержит пробелы, другие разделители или специальные символы, такие как &|<>....

  2. Это позволяет избежать проблем с синтаксисом модификатора переменной, таким как поиск / замена !var:search=replace! или синтаксис подстроки !var:~<start>,<size>!

Отсроченное расширение
Ваша вторая проблема заключается в том, что процентное расширение происходит, когда блок анализируется перед его выполнением.

Поэтому if %v%==P ... никогда не расширяется до значения введенного v, вместо этого он был расширен, вероятно, до нуля.

В блоках (или лучше всегда) используйте замедленное расширение.

if not "!url:&list=!" == "!url!" (
    set /p v="video or playlist ? (V/P)"
    if "!v!" == "P" (
        youtube-dl.exe -f !qual! --yes-playlist "!url!"
    ) else (
...
...