Показать полную графическую версию : [решено] перечисление аргументов
Freddy1984
13-06-2017, 17:34
Приветствую.
Подскажите пожалуйста, возможно ли перечислить аргументы?
Подробнее:
if exist xxx.txt find /i "404 Not Found" ........
То есть в данном случае в txt ищется аргумент в виде 404 Not Found, и если он 404, то дальше происходит то-то и тото....
Мне необходимо добавить ещё пару ответов от сервера для аргумента (403 Forbidden, 501 Not Implemented), то есть что бы аргумент работал в виде - вижу либо первое, либо второе, либо третье, тогда делаю то-то и то-то..
Подскажите пожалуйста, как перечислить аргументы в моём случае??
Спасибо.
megaloman
13-06-2017, 18:57
Вот вариант@Echo Off
Cls
Set "FileIn=xxx.txt"
Set /A Found=0
If Exist "%FileIn%" (
find /i "404 Not Found" "%FileIn%" >Nul &&Set /A Found=1
find /i "403 Forbidden" "%FileIn%" >Nul &&Set /A Found=1
find /i "501 Not Implemented" "%FileIn%" >Nul &&Set /A Found=1
)
If %Found%==1 Echo tralala
pauseЧуть короче, но медленнее @Echo Off
Cls
Set "FileIn=xxx.txt"
Set /A Found=0
find /i "404 Not Found" "%FileIn%" >Nul &&Set /A Found=1
find /i "403 Forbidden" "%FileIn%" >Nul &&Set /A Found=1
find /i "501 Not Implemented" "%FileIn%" >Nul &&Set /A Found=1
If %Found%==1 Echo tralala
pause
greg zakharov
13-06-2017, 19:04
findstr /irc:"[4-5]0[1,3,4] [not|forbidden]" xxx.txt
Freddy1984
13-06-2017, 22:53
[4-5]0[1,3,4] »
можно вас попросить расшифровать значение этих цифр?
И ещё доп. вопросик. Если у примеру мне ещё понадобится добавить ответ от сервака к примеру 500 Internal Server Error, то как я понял надо будет сделать так [not|forbidden|Internal Server Error] ??
findstr — да, но я бы делал не регуляркой, а тупым перечислением (на будущее):
type "xxx.txt" | findstr.exe /i /l /c:"404 Not Found" /c:"403 Forbidden" /c:"501 Not Implemented" && (
echo Found
)
Update: ну, собственно, вот будущее:
Если у примеру мне ещё понадобится добавить ответ от сервака »
уже и наступило :).
type "xxx.txt" | findstr.exe /i /l /c:"404 Not Found" /c:"403 Forbidden" /c:"500 Internal Server Error" /c:"501 Not Implemented" && (
echo Found
)
Freddy1984
13-06-2017, 23:24
уже и наступило »
:up
greg zakharov
14-06-2017, 09:12
можно вас попросить расшифровать значение этих цифр?Это шаблон числового значения, который должен присутствовать в строке.
но я бы делал не регуляркойА аргументы в пользу перечисления? Ну будете Вы искать строки дословно и что? Или Вы полагаете, что за раз все заданные выражения из потока извлекутся? И потом, проще подправить регулярку, например:
findstr /irc:"[4-5]0[0-1,3-4] [not|int|for]" xxx.txt
чем набивать новое выражение для поиска. Но, есть одно обстоятельство, умаляющее роль штатного инструментария Windows (в том числе findstr). Во-первых, ограничение длины строки, накладываемое на findstr, то есть при использовании регулярок захватывается не часть строки (как это делает, например, grep), а строка целиком, и если длина строки превышает предельно допустимую, выводится соответсвующее сообщение. То же, кстати, справедливо и для поиска со строгим соответствием (ключ /L), а раз так, а также то, что регулярки значительно компактней, то и смысл затевать перечисления невелик. По этой причине лучше использовать:
1) более продвинутые инструменты поиска соответствий в строке
2) регулярные выражения
А аргументы в пользу перечисления? »
Я ж написал — так проще для коррекции списка, нежели подбирать регулярки. И посему никак не могу согласиться с Вами в:
проще подправить регулярку, … чем набивать новое выражение для поиска. »
В чём проблема регулярок как таковых? В маловменяемости шаблонов для понимания, в жёстком ограничении на входные данные.
greg zakharov
14-06-2017, 10:20
В чём проблема регулярок как таковых? В маловменяемости шаблонов для понимания, в жёстком ограничении на входные данные.Эти условия соответсвуют правде тогда (и только тогда), когда регулярные выражения либо не знают, либо не понимают. А список - это не аргумент. Представьте сто (или более) шаблонных строк, имеющих схожие признаки. Вы будете составлять список или все же будете использовать регулярное выражение из пары десятков символов? Можно было бы сказать, что выбор очевиден (а он и впрямь очевиден), но хотелось бы выслушать Ваши контраргументы и увидеть очередные благодарности к ним со стороны третьих лиц :)
greg zakharov, проблема в ложных срабатываниях, т.к. шаблон шире. Сейчас это прокатывает, т.к. по сути автору нужно отфильтровать всё, что не "200 OK"
greg zakharov, и с этим:
Эти условия соответсвуют правде тогда (и только тогда), когда регулярные выражения либо не знают, либо не понимают. »
не могу согласиться.
Представьте сто (или более) шаблонных строк… »
Зависит от вида строк. В описанном же случае и имеющихся условиях тем более будет проще и нагляднее использовать обычный внешний файл:
type "xxx.txt" | findstr.exe /i /l /g:"Templates.txt" && (
echo Found
)
нежели пытаться составлять корректные регулярки.
Вы будете составлять список »
Буду.
или все же будете использовать регулярное выражение из пары десятков символов? »
Не буду.
Можно было бы сказать, что выбор очевиден (а он и впрямь очевиден), »
Он очевиден. И для Вас, и для меня. Только он в данном случае разный.
greg zakharov
14-06-2017, 11:18
проблема в ложных срабатыванияхИ снова таки: это справедливо в случаях озвученных выше. На практике еще не разу не было так, чтобы хорошо составленная регулярка жрала как не в себя давала осечки, тем паче, как опять-таки было сказано выше, findstr (как и большинство штатных виндовых команд) обладают крайне куцым функционалом. Еще раз повторить или все же будем внимательно читать написанное ранее? :)
greg zakharov, проблема в ложных срабатываниях, »
Busla, пока что нет — приведённые коллегой greg zakharov регулярки охватывают ровно то, что нужно, и не более, можете посмотреть сами. Проблема именно в том — чего упорно не желает видеть коллега greg zakharov — что расширение перечня строк на одну строку потребовало добавить ровно одну строку шаблона — не задумываясь, а регулярка:
[4-5]0[1,3,4] [not|forbidden]
[4-5]0[0-1,3-4] [not|int|for]
потребовала полной переделки (и, разумеется, проверки).
greg zakharov
14-06-2017, 11:29
не могу согласитьсяВаше право.
нежели пытаться составлять корректные регуляркиА что пытаться? Повторяю: либо их знают и понимают, а посему умеют ими пользоваться, либо ничего из оного. Лучше потратить несколько лет на шливовку знаний регулярок, нежели писать "портянки".
Буду.Тогда получите титул короля индуского кода.:) Вы сейчас напоминаете одного бывшего коллегу.
Не буду.См. выше.
потребовала полной переделки (и, разумеется, проверки).Где "полная" переделка? На счет тестов, если честно, их не было вовсе. Регулярка писалась исходя из уже имеющегося опыта.
Freddy1984
14-06-2017, 11:35
Ок господа. я извиняюсь что встреваю в довольно интересные дебаты, но вот у меня мысль такая. А можно каким либо образом указать в аргументе - всё, кроме 200 ОК ? или от перечисления ответов сервера таки никуда и не деться?
А цель какова в данном:
всё, кроме 200 ОК »
случае? Что Вы хотите получить?
greg zakharov
14-06-2017, 12:15
А можно каким либо образом указать в аргументе - всё, кроме 200 ОК ?findstr /virc:"200 OK" xxx.txt
Freddy1984
14-06-2017, 12:34
Что Вы хотите получить? »
а то что бы только при аргументе 200 ОК процесс шел дальше, а все остальные ответы от сервера игнорировались..
Freddy1984, так тогда Вам, наоборот, нужно найти хотя бы один ответ «200 ОК» в файле, так?
Freddy1984
14-06-2017, 14:55
так? »
вероятно так :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.