Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум 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

 

Ветеран


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

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


Цитата greg zakharov:
Ко всему прочему, давайте начистоту. PowerShell в основе которого лежит платформа .NET Framework де-юре может использоваться, но де-факто - труп, а трупов пинать нехорошо. Так что имхай, не имхай, но как раз оглядка на обратную совместимость - большая ошибка (как и основной тормоз в плане мигрирования на pwsh, ибо в последнем куда более полезных фич. »
«А я, сынок, всё одну, одну…»™ .

Отправлено: 22:06, 11-09-2020 | #21



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

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


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Powershell:
Код: Выделить весь код
$url = (Read-Host "URL").trim() -replace '/$'

if ($url -match '\d{8}') {"Цифры"}
elseif ($url.Split('/')[2] -match "\..*?\.") {"Субдомен"}
else {"Юзер"}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

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


Забанен


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

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


DJ Mogarych, если цифра восьмизначная, в общем-то можно жахать регуляркой, а вот по части сплитов, тримов и репласов... Вот поэтому лучше использовать URI.
Код: Выделить весь код
[Uri[]]$u = 'https://site.com/user/anything/anything',
      'https://anything.site.com/anything-anything-12345678/anything',
      'https://anything.site.com'
$u.ForEach{$_ -match '\d{8}' ? 'number' : $_.PathAndQuery -eq '/' ? 'subdomain' : 'user'}
Если бы автор темы предоставил более входящих данных, не пришлось бы гадать что да как должно быть.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:21, 12-09-2020 | #23


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Код: Выделить весь код
[uri]
Прикольная штука!

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 13:06, 12-09-2020 | #24


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


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

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


Спасибо вам небожители что снисходите со своей помощью к нам - простым смертным.
Без вас я бы точно не справился. И так много ответов.
Теперь буду сидеть с словариком эльфийского гуглом разбираясь в пош коде.
Спасибо большое.

Отправлено: 14:25, 12-09-2020 | #25


Забанен


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

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


Хотя megaloman уже предлагал решение на командном языке, сам он посетовал на объём кода. В принципе, кое-какие моменты им были намечены правильно (например, регулярка для восьмизначного числа), но многое можно нивелировать.
Код: Выделить весь код
@echo off
  setlocal enabledelayedexpansion
    :: массив ссылок, индексация начинается с единицы
    set "url.1=https://site.com/user/anything/anything"
    set "url.2=https://anything.site.com/anything-anything-12345678/anything"
    set "url.3=https://anything.site.com"
    :: перебираем массив URL'ов
    call:foreach "set url"
  endlocal
exit /b

:foreach
  for /l %%i in (1,1,3) do (
    (%~1.%%i|>nul findstr /rc:"-[0-9]*/")&&(echo:%%~i - number)||(
      for /f "tokens=2,3 delims=/" %%j in ('%~1.%%i') do (
        if [%%k] neq [] (
          echo:%%~i - user
        ) else echo:%%~i - subdomain
      )
    )
  )
exit /b
После запуска сценария, получим:
Код: Выделить весь код
1 - user
2 - number
3 - subdomain
Если перетасовать элементы массива, например, так:
Код: Выделить весь код
    ...
    set "#=!url.1!"
    set "url.1=!url.3!"
    set "url.3=!url.2!"
    set "url.2=!#!"
    :: выводим изменённый массив
    set url
    :: снова перебираем массив
    call:foreach "set url"
    ...
Получим:
Код: Выделить весь код
url.1=https://anything.site.com
url.2=https://site.com/user/anything/anything
url.3=https://anything.site.com/anything-anything-12345678/anything
1 - subdomain
2 - user
3 - number
Очевидно, что корректность зависит от токенов и регулярки. Это что касается решения задачи штатными средствами. Относительно сторонних программ\платформ\утилит: очень просто URL'ы разбираются jq, node и минишеллами вроде miniperl или miniruby, а также gawk'ом, - информация к размышлению.

Отправлено: 15:10, 13-09-2020 | #26



Компьютерный форум 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




 
Переход