Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] перечисление аргументов (http://forum.oszone.net/showthread.php?t=327568)

Freddy1984 13-06-2017 17:34 2744245

перечисление аргументов
 
Приветствую.
Подскажите пожалуйста, возможно ли перечислить аргументы?
Подробнее:
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 2744270

Вот вариант
Код:

@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 2744271

Код:

findstr /irc:"[4-5]0[1,3,4] [not|forbidden]" xxx.txt

Freddy1984 13-06-2017 22:53 2744324

Цитата:

Цитата greg zakharov
[4-5]0[1,3,4] »

можно вас попросить расшифровать значение этих цифр?
И ещё доп. вопросик. Если у примеру мне ещё понадобится добавить ответ от сервака к примеру 500 Internal Server Error, то как я понял надо будет сделать так [not|forbidden|Internal Server Error] ??

Iska 13-06-2017 23:08 2744331

findstr — да, но я бы делал не регуляркой, а тупым перечислением (на будущее):
Код:

type "xxx.txt" | findstr.exe /i /l /c:"404 Not Found" /c:"403 Forbidden" /c:"501 Not Implemented" && (
    echo Found
)

Update: ну, собственно, вот будущее:
Цитата:

Цитата Freddy1984
Если у примеру мне ещё понадобится добавить ответ от сервака »

уже и наступило :).

Код:

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 2744341

Цитата:

Цитата Iska
уже и наступило »

:up

greg zakharov 14-06-2017 09:12 2744406

Цитата:

Цитата Freddy1984
можно вас попросить расшифровать значение этих цифр?

Это шаблон числового значения, который должен присутствовать в строке.
Цитата:

Цитата Iska
но я бы делал не регуляркой

А аргументы в пользу перечисления? Ну будете Вы искать строки дословно и что? Или Вы полагаете, что за раз все заданные выражения из потока извлекутся? И потом, проще подправить регулярку, например:
Код:

findstr /irc:"[4-5]0[0-1,3-4] [not|int|for]" xxx.txt
чем набивать новое выражение для поиска. Но, есть одно обстоятельство, умаляющее роль штатного инструментария Windows (в том числе findstr). Во-первых, ограничение длины строки, накладываемое на findstr, то есть при использовании регулярок захватывается не часть строки (как это делает, например, grep), а строка целиком, и если длина строки превышает предельно допустимую, выводится соответсвующее сообщение. То же, кстати, справедливо и для поиска со строгим соответствием (ключ /L), а раз так, а также то, что регулярки значительно компактней, то и смысл затевать перечисления невелик. По этой причине лучше использовать:
1) более продвинутые инструменты поиска соответствий в строке
2) регулярные выражения

Iska 14-06-2017 09:39 2744412

Цитата:

Цитата greg zakharov
А аргументы в пользу перечисления? »

Я ж написал — так проще для коррекции списка, нежели подбирать регулярки. И посему никак не могу согласиться с Вами в:
Цитата:

Цитата greg zakharov
проще подправить регулярку, … чем набивать новое выражение для поиска. »

В чём проблема регулярок как таковых? В маловменяемости шаблонов для понимания, в жёстком ограничении на входные данные.

greg zakharov 14-06-2017 10:20 2744420

Цитата:

Цитата Iska
В чём проблема регулярок как таковых? В маловменяемости шаблонов для понимания, в жёстком ограничении на входные данные.

Эти условия соответсвуют правде тогда (и только тогда), когда регулярные выражения либо не знают, либо не понимают. А список - это не аргумент. Представьте сто (или более) шаблонных строк, имеющих схожие признаки. Вы будете составлять список или все же будете использовать регулярное выражение из пары десятков символов? Можно было бы сказать, что выбор очевиден (а он и впрямь очевиден), но хотелось бы выслушать Ваши контраргументы и увидеть очередные благодарности к ним со стороны третьих лиц :)

Busla 14-06-2017 10:49 2744428

greg zakharov, проблема в ложных срабатываниях, т.к. шаблон шире. Сейчас это прокатывает, т.к. по сути автору нужно отфильтровать всё, что не "200 OK"

Iska 14-06-2017 11:13 2744432

greg zakharov, и с этим:
Цитата:

Цитата greg zakharov
Эти условия соответсвуют правде тогда (и только тогда), когда регулярные выражения либо не знают, либо не понимают. »

не могу согласиться.

Цитата:

Цитата greg zakharov
Представьте сто (или более) шаблонных строк… »

Зависит от вида строк. В описанном же случае и имеющихся условиях тем более будет проще и нагляднее использовать обычный внешний файл:
Код:

type "xxx.txt" | findstr.exe /i /l /g:"Templates.txt" && (
    echo Found
)

нежели пытаться составлять корректные регулярки.

Цитата:

Цитата greg zakharov
Вы будете составлять список »

Буду.

Цитата:

Цитата greg zakharov
или все же будете использовать регулярное выражение из пары десятков символов? »

Не буду.

Цитата:

Цитата greg zakharov
Можно было бы сказать, что выбор очевиден (а он и впрямь очевиден), »

Он очевиден. И для Вас, и для меня. Только он в данном случае разный.

greg zakharov 14-06-2017 11:18 2744435

Цитата:

Цитата Busla
проблема в ложных срабатываниях

И снова таки: это справедливо в случаях озвученных выше. На практике еще не разу не было так, чтобы хорошо составленная регулярка жрала как не в себя давала осечки, тем паче, как опять-таки было сказано выше, findstr (как и большинство штатных виндовых команд) обладают крайне куцым функционалом. Еще раз повторить или все же будем внимательно читать написанное ранее? :)

Iska 14-06-2017 11:20 2744436

Цитата:

Цитата Busla
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 2744440

Цитата:

Цитата Iska
не могу согласиться

Ваше право.
Цитата:

Цитата Iska
нежели пытаться составлять корректные регулярки

А что пытаться? Повторяю: либо их знают и понимают, а посему умеют ими пользоваться, либо ничего из оного. Лучше потратить несколько лет на шливовку знаний регулярок, нежели писать "портянки".
Цитата:

Цитата Iska
Буду.

Тогда получите титул короля индуского кода.:) Вы сейчас напоминаете одного бывшего коллегу.
Цитата:

Цитата Iska
Не буду.

См. выше.
Цитата:

Цитата Iska
потребовала полной переделки (и, разумеется, проверки).

Где "полная" переделка? На счет тестов, если честно, их не было вовсе. Регулярка писалась исходя из уже имеющегося опыта.

Freddy1984 14-06-2017 11:35 2744444

Ок господа. я извиняюсь что встреваю в довольно интересные дебаты, но вот у меня мысль такая. А можно каким либо образом указать в аргументе - всё, кроме 200 ОК ? или от перечисления ответов сервера таки никуда и не деться?

Iska 14-06-2017 12:15 2744454

А цель какова в данном:
Цитата:

Цитата Freddy1984
всё, кроме 200 ОК »

случае? Что Вы хотите получить?

greg zakharov 14-06-2017 12:15 2744455

Цитата:

Цитата Freddy1984
А можно каким либо образом указать в аргументе - всё, кроме 200 ОК ?

Код:

findstr /virc:"200 OK" xxx.txt

Freddy1984 14-06-2017 12:34 2744461

Цитата:

Цитата Iska
Что Вы хотите получить? »

а то что бы только при аргументе 200 ОК процесс шел дальше, а все остальные ответы от сервера игнорировались..

Iska 14-06-2017 13:17 2744469

Freddy1984, так тогда Вам, наоборот, нужно найти хотя бы один ответ «200 ОК» в файле, так?

Freddy1984 14-06-2017 14:55 2744537

Цитата:

Цитата Iska
так? »

вероятно так :)

megaloman 14-06-2017 15:30 2744550

Код:

@Echo Off
Cls
Set "FileIn=xxx.txt"

find /i " 200 OK" "%FileIn%" >Nul &&(
        Echo 200 OK
        Echo 200 OK
        Echo 200 OK
)
pause



Время: 14:33.

Время: 14:33.
© OSzone.net 2001-