Найти, если строка содержит несколько разных подстрок - PullRequest
0 голосов
/ 30 июня 2019

Я перебираю текстовый документ для назначения URL-адресов загрузчику.Если URL содержит определенные пути (например, /channels/), перед загрузкой ему необходимо назначить другой набор настроек.

for /F "tokens=*" %%A in (batch.txt) do (
    echo %%A|find "/channel/"|find "/user/"
    if errorlevel 0 echo %%A
    else if echo %%A|find "/watch?"
    if errorlevel 0 echo %%A
    else if echo %%A|find "/playlist?"
    if errorlevel 0 echo %%A
    else echo FAIL
)

Это не работает и повторяет каждую строку моего файла.Я знаю, что моя if else структура неверна, но я не знаю правильный синтаксис.Мне также нужно игнорировать строки, начинающиеся с #.Как я могу это сделать?

1 Ответ

0 голосов
/ 30 июня 2019
@ECHO OFF
SETLOCAL

SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q56820987.txt"

FOR /f "tokens=*eol=#" %%a IN (%filename1%) DO (
 ECHO %%a|FIND "/channel/" >NUL
 IF NOT ERRORLEVEL 1 ECHO found "/channel/" IN %%a
 ECHO %%a|FIND "/watch?" >NUL
 IF NOT ERRORLEVEL 1 ECHO found "/watch?" IN %%a
 ECHO %%a|FIND "/playlist?" >NUL
 IF NOT ERRORLEVEL 1 ECHO found "/playlist?" IN %%a

)

GOTO :EOF

Вам необходимо изменить настройку sourcedir в соответствии с вашими обстоятельствами. В листинге используется настройка, которая подходит для моей системы.

Я использовал файл с именем q56820987.txt, содержащий фиктивные данные для моего тестирования.

Помимо неверного синтаксиса if / else, IF ERRORLEVEL n равно TRUE, если errorlevel равно n или больше, чем n . IF ERRORLEVEL 0 поэтому всегда верно. IF NOT ERRORLEVEL 1 - это тест на errorlevel = 0. То же самое можно сказать и о IF %ERRORLEVEL%==0, за исключением того, что первый может использоваться внутри блока, но последний не может.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...