|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Распределить ссылки |
|
|
CMD/BAT - [решено] Распределить ссылки
|
Новый участник Сообщения: 44 |
Профиль | Отправить PM | Цитировать Здравствуйте, пытаюсь решить задачу но не знаю как.
На вход скрипта приходят URL трёх видов: https://site.com/user/anything/anything https://anything.site.com/anything-anything-12345678/anything https://anything.site.com/ Из второго только цифры (они всегда разные) Из третьего только субдомейн (в данном случае anything) это я знаю как сделать. После в каждом конкретном случае мне нужно сформировать URL и открыть в браузере. И тут у меня ступор. Каким образом решаются подобные задачи? Как сделать так что бы скрипт различал что это ссылка на пользователя, пост или субдомейн и запускал на исполнение соответствующую сабрутину? Заранее благодарю. |
|
Отправлено: 23:42, 10-09-2020 |
Ветеран Сообщения: 1754
|
|
Отправлено: 00:47, 11-09-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Foreigner, У меня не сработало:
Цитата:
$urls = 'https://site.com/user/anything/anything', 'https://anything.site.com/anything-anything-12345678/anything', 'https://anything.site.com/' cls $user = ($urls|sls "(?<=(?<!\..+)\.[^\.]+?/)[^/]+(?!.*-\d/)").Matches.Value $sub = ($urls|sls "[^/]+?(?=\.(?=.+\.)[^/]+/$)").Matches.Value $post = ($urls|sls "(?<=-)\d+").Matches.Value "https://$sub.site.com/$user/$post" |
|
Отправлено: 02:28, 11-09-2020 | #3 |
Ветеран Сообщения: 1754
|
Цитата Fors1k:
$urls = 'https://site.com/user/anything/anything', 'https://anything.site.com/anything-anything-12345678/anything', 'https://anything.site.com/' $user, $post, $sub = $urls -replace '.+//[^./]+\.[^/]+/([^/]+)/.+','$1' ` -replace '\D+(\d+)','$1' ` -replace '.+//([^./]+).+', '$1' "https://$sub/$user/$post" |
|
Отправлено: 07:23, 11-09-2020 | #4 |
(*.*) Сообщения: 36490
|
Профиль | Сайт | Отправить PM | Цитировать PowerShell
В данном случае в качестве альтернативы регулярному выражению можно использовать оператор -Split - это попроще для непосвященных кмк (по кр. мере на простых примерах, объяснял тут https://www.outsidethebox.ms/19453/). $urls = 'https://site.com/user/anything/anything', 'https://anything.site.com/anything-anything-12345678/anything', 'https://anything.site.com/' $user = $urls[0].split('/')[3] $post = ($urls[1].split('/')[3]).split('-')[2] $sub = ($urls[2].split('/')[2]).split('.')[0] "https://$sub.site.com/$user/$post" |
|
------- Отправлено: 08:44, 11-09-2020 | #5 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата Vadikan:
Цитата ateka:
Foreigner, тоже не сработает для другого порядка. |
||
Отправлено: 10:42, 11-09-2020 | #6 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Друзья, я дико извиняюсь что был неясен и ввёл вас в заблуждение. Просто эта задача сломала мне остатки мозга. На вход скрипта приходит одного из трёх видов. И в зависимости от вида url я его обрабатываю нужным образом.
За регулярки огромное спасибо я как раз думал в эту сторону но сам не осилил. |
Отправлено: 11:23, 11-09-2020 | #7 |
Ветеран Сообщения: 1754
|
Цитата Fors1k:
|
|
Отправлено: 11:50, 11-09-2020 | #8 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата ateka:
$urls = ( 'https://site.com/user/anything/anything', 'https://anything.site.com/anything-anything-12345678/anything', 'https://anything.site.com/' )|Get-Random;cls $search = @{ postID = "(?<=-)\d+" userID = "(?<=(?<!\..+)\.\w+?/)[^/]+" subDomain = "[^/]+?(?=\.(?=.+\.)[^/]+/$)" } $search.keys|%{ if($i=($urls|SLS $search[$_]).Matches.Value){ nv $_ $i -F;"В ссылке было:";gv $_|ft -hi } } |
|
Последний раз редактировалось Fors1k, 11-09-2020 в 12:42. Отправлено: 12:34, 11-09-2020 | #9 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата ateka:
Длинно, но зато CMD
@Echo Off cls Set "URL=https://site.com/user/anything/anything" Call :DefOut "%URL%" "Log" "Out" Call :Sub%Log% "%URL%" "%Log%" "%Out%" Set "URL=https://anything.site.com/anything-anything-12345678/anything" Call :DefOut "%URL%" "Log" "Out" Call :Sub%Log% "%URL%" "%Log%" "%Out%" Set "URL=https://anything.site.com/" Call :DefOut "%URL%" "Log" "Out" Call :Sub%Log% "%URL%" "%Log%" "%Out%" pause Exit /B :Sub1 Echo ======= Echo Вариант %2: user Echo %1 Echo %3 Echo. Exit /B :Sub2 Echo ======= Echo Вариант %2: Цифры Echo %1 Echo %3 Echo. Exit /B :Sub3 Echo ======= Echo Вариант %2: Субдомен Echo %1 Echo %3 Echo. Exit /B :DefOut SetLocal Set "In=%~1" Set "In=%In:*//=%" Set "Reg=-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" FOR /F "tokens=1,2 delims=/" %%s IN ("%In%") DO ( If "%%t"=="" ( FOR /F "tokens=1 delims=." %%a IN ("%In%") DO ( EndLocal &(Set /A %~2=3 &Set "%~3=%%a" &Exit /B 3) ) ) Set "In2=%%t" Call Set "In2=%%In2:~-9%%" Echo %%t|findstr /E /R /C:"%Reg%">nul||( EndLocal &(Set /A %~2=1 &Set "%~3=%%t" &Exit /B 1) ) ) Echo %In2%|findstr /E /R /C:"%Reg%">nul&&EndLocal &(Set /A %~2=2 &Set "%~3=%In2:~-8%" &Exit /B 2) EndLocal &(Set /A %~2=0 &Set "%~3=" &Exit /B 0) Exit /B |
|
------- Отправлено: 16:00, 11-09-2020 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
FreeBSD - Распределить процесс на 8 ядер | Dj_smart | Общий по FreeBSD | 0 | 03-10-2010 19:14 | |
Proxy/NAT - Как распределить трафик инета? | Evgen82 | Сетевые технологии | 14 | 15-03-2010 08:24 | |
Два провайдера - как распределить? | hunternew | Сетевые технологии | 6 | 07-02-2010 16:18 | |
UserGate - Распределить Безлимитку по сети | sadamchik | Сетевые технологии | 9 | 20-02-2009 23:00 | |
2 сетевых подключения... как распределить? | DARGO | Сетевые технологии | 1 | 29-05-2006 13:50 |
|