Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Распределить ссылки

Ответить
Настройки темы
CMD/BAT - [решено] Распределить ссылки

Новый участник


Сообщения: 44
Благодарности: 3

Профиль | Отправить PM | Цитировать


Здравствуйте, пытаюсь решить задачу но не знаю как.
На вход скрипта приходят URL трёх видов:
Код: Выделить весь код
https://site.com/user/anything/anything
https://anything.site.com/anything-anything-12345678/anything
https://anything.site.com/
Из первого мне нужен только user
Из второго только цифры (они всегда разные)
Из третьего только субдомейн (в данном случае anything)
это я знаю как сделать.
После в каждом конкретном случае мне нужно сформировать URL и открыть в браузере.
И тут у меня ступор. Каким образом решаются подобные задачи?
Как сделать так что бы скрипт различал что это ссылка на пользователя, пост или субдомейн
и запускал на исполнение соответствующую сабрутину?
Заранее благодарю.

Отправлено: 23:42, 10-09-2020

 

Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


PowerShell:

Код: Выделить весь код
$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'
        
$user
$post
$sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:47, 11-09-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Foreigner, У меня не сработало:
Цитата:
user
anything-anything-12345678
https://anything.site.com/
Код: Выделить весь код
$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"
Адова регулярка (с) DJ Mogarych, но на ночь глядя ничего красивее не стал искать)
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:28, 11-09-2020 | #3


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата 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
Благодарности: 6675

Профиль | Сайт | Отправить 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"

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:44, 11-09-2020 | #5


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата Vadikan:
можно использовать оператор -Split »
Цитата ateka:
Как сделать так что бы скрипт различал что это ссылка на пользователя, пост или субдомейн »
Split конечно проще, но автор не знает как отличить ссылки друг от друга. Это говорит о том, что порядок ссылок заранее не известен.
Foreigner, тоже не сработает для другого порядка.

Отправлено: 10:42, 11-09-2020 | #6


Новый участник


Сообщения: 44
Благодарности: 3

Профиль | Отправить PM | Цитировать


Друзья, я дико извиняюсь что был неясен и ввёл вас в заблуждение. Просто эта задача сломала мне остатки мозга. На вход скрипта приходит одного из трёх видов. И в зависимости от вида url я его обрабатываю нужным образом.
Код: Выделить весь код
if _url==https://site.com/user/anything/anything goto usercheck
else
if _url==https://anything.site.com/anything-anything-12345678/anything goto postcheck
else
if _url==https://anything.site.com/ goto subdomaincheck
else goto error
За регулярки огромное спасибо я как раз думал в эту сторону но сам не осилил.

Отправлено: 11:23, 11-09-2020 | #7


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата Fors1k:
тоже не сработает для другого порядка. »
Возможно, Select-String тогда полезен, хоть и надо тестировать в любом случае. С урлами выкрутасы еще те.

Отправлено: 11:50, 11-09-2020 | #8


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить 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


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата ateka:
На вход скрипта приходит одного из трёх видов. И в зависимости от вида url я его обрабатываю нужным образом. »
Длинно, но зато 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Распределить ссылки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход