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

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

Ответить
Настройки темы
Любой язык - Сопоставить ссылки рядом, между ними установить символ.

Ветеран


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

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


Изменения
Автор: Alexander_88
Дата: 16-12-2023
Здравствуйте, решение нужно на BAT или на powershell.Есть два списка ссылок в txt файлах old.txt и new.txt (каждая ссылка с новой строки). Необходимо создать файл result.txt, в котором будут сопоставлены ссылки из этих двух текстовых файлов. Сопоставлять нужно по имени файла, игнорируя расширение, в конце каждой ссылки (если имя файла (игнорируя расширение) совпадает, то ссылка сопоставляется). Сопоставлять нужно через символ " | " ( до и после этого символа пробел ). result.txt должен получиться такого формата:
ссылка из old.txt | ссылка new.txt, совпадающая по имени файла (игнорируя расширение) c ссылкой old.txt

Если ссылки из old.txt нету в new.txt, то ее должно не быть в результирующем файле.
В old.txt может быть несколько ссылок с одним и тем же именем файла, каждой из них нужно сопоставить соответствующую ссылку из файла new.txt (если она есть). В new.txt, совпадающих ссылок по имени файла точно нет. Расширение в имени файла нужно игнорировать, т.е. сопоставление идет только по имени файла без расширения.. к примеру ссылка с именем файла "111re.avi" сопоставится с ссылкой с именем файла "111re.mp4"
Пример:
файл old.txt
Код: Выделить весь код
https://k2s.cc/file/uufyfidu/0498start.avi
https://k2s.cc/file/wwwww/0382start.wmv
https://k2s.cc/file/qqqqqqq/0606start.mp4
https://k2s.cc/file/sssssssss/0330tun.mp4
https://k2s.cc/file/yyyyyyy1/0330tun.flv
https://k2s.cc/file/aaaaaaaa/classic0372.mp4
https://k2s.cc/file/22222222/omgty0997.mp4
https://k2s.cc/file/11111111/0332yyx.avi
https://k2s.cc/file/7777e665/omgty0997.mp4
https://k2s.cc/file/11111111/77743yyx.mpg
https://k2s.cc/file/11111111/5572eyyx.mp4
файл new.txt
Код: Выделить весь код
https://k2s.cc/file/dfgksdfdf/start765.mp4
https://k2s.cc/file/ksdjghfgjk/0382start.mp4
https://k2s.cc/file/sdfdsffdfdf/avvo1123.mp4
https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/dfgsfgsf/classic0372.mp4
https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4
https://k2s.cc/file/sgfdhgew/0332yyx.mp4
https://k2s.cc/file/jgmgjyh/0498start.mp4
https://k2s.cc/file/1112222/0364start.mp4
https://k2s.cc/file/bcnndgd/0606start.mp4
https://k2s.cc/file/sdfgsfgsdgh/0783yye.mp4
https://k2s.cc/file/fjgjuhkku/classictr43.mp4
https://k2s.cc/file/werwerwes/54tyi.mp4
https://k2s.cc/file/dfgfdhdghgf/uwrt463.mp4
Результирующий файл получится такой:
Код: Выделить весь код
https://k2s.cc/file/uufyfidu/0498start.avi | https://k2s.cc/file/jgmgjyh/0498start.mp4
https://k2s.cc/file/wwwww/0382start.mp4 | https://k2s.cc/file/ksdjghfgjk/0382start.mp4
https://k2s.cc/file/qqqqqqq/0606start.mp4 | https://k2s.cc/file/bcnndgd/0606start.mp4
https://k2s.cc/file/sssssssss/0330tun.flv | https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/yyyyyyy1/0330tun.flv | https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/aaaaaaaa/classic0372.mp4 | https://k2s.cc/file/dfgsfgsf/classic0372.mp4
https://k2s.cc/file/22222222/omgty0997.mp4 | https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4
https://k2s.cc/file/11111111/0332yyx.avi | https://k2s.cc/file/sgfdhgew/0332yyx.mp4
https://k2s.cc/file/7777e665/omgty0997.mp4 | https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4

Отправлено: 00:43, 30-01-2019

 

Ветеран


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

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


Цитата Alexander_88:
В new.txt, совпадающих ссылок по имени файла точно нет. »
Поверим Вам на слово и никак не будем сие проверять .

Цитата Alexander_88:
Результирующий файл получится такой: »
Не получится. Не получится из:
Код: Выделить весь код
https://k2s.cc/file/uufyfidu/0498start.avi
https://k2s.cc/file/wwwww/0382start.wmv
https://k2s.cc/file/qqqqqqq/0606start.mp4
https://k2s.cc/file/sssssssss/0330tun.mp4
https://k2s.cc/file/yyyyyyy1/0330tun.flv
https://k2s.cc/file/aaaaaaaa/classic0372.mp4
https://k2s.cc/file/22222222/omgty0997.mp4
https://k2s.cc/file/11111111/0332yyx.avi
https://k2s.cc/file/7777e665/omgty0997.mp4
https://k2s.cc/file/11111111/77743yyx.mpg
https://k2s.cc/file/11111111/5572eyyx.mp4
файла:
Код: Выделить весь код
https://k2s.cc/file/uufyfidu/0498start.avi | https://k2s.cc/file/jgmgjyh/0498start.mp4
https://k2s.cc/file/wwwww/0382start.mp4 | https://k2s.cc/file/ksdjghfgjk/0382start.mp4
https://k2s.cc/file/qqqqqqq/0606start.mp4 | https://k2s.cc/file/bcnndgd/0606start.mp4
https://k2s.cc/file/sssssssss/0330tun.flv | https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/yyyyyyy1/0330tun.flv | https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/aaaaaaaa/classic0372.mp4 | https://k2s.cc/file/dfgsfgsf/classic0372.mp4
https://k2s.cc/file/22222222/omgty0997.mp4 | https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4
https://k2s.cc/file/11111111/0332yyx.avi | https://k2s.cc/file/sgfdhgew/0332yyx.mp4
https://k2s.cc/file/7777e665/omgty0997.mp4 | https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4
Никак не может такового получиться.

А так — пробуйте:
Скрытый текст
Код: Выделить весь код
$sOldFile    = 'C:\Мои проекты\0241\old.txt'
$sNewFile    = 'C:\Мои проекты\0241\new.txt'
$sResultFile = 'C:\Мои проекты\0241\result.txt'

Get-Content -Path $sNewFile | ForEach-Object -Begin {
        $hNewTable = @{}
    } -Process {
        $hNewTable.Add([IO.Path]::GetFileNameWithoutExtension($_), $_)
    }

Get-Content -Path $sOldFile | ForEach-Object -Process {
    $sOldName = [IO.Path]::GetFileNameWithoutExtension($_)

    if($hNewTable.ContainsKey($sOldName)) {
        "$($_) | $($hNewTable[$sOldName])"
    }
} | Set-Content -Path $sResultFile
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:56, 30-01-2019 | #2



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

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


Ветеран


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

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


Спасибо, работает. Да, скрипта не было, результирующий файл руками составлял и ошибся

Отправлено: 09:48, 30-01-2019 | #3


Ветеран


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

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


Этот вариант скрипта основной, еще нужно дополнительный, все точно также, только нужно, чтобы при сопоставлении, в имени файла игнорировался символ земли _
Такие символы встречаются только в old.txt.
Пример:
old.txt
Код: Выделить весь код
https://k2s.cc/file/uufyfidu/0498_start.avi
new.txt
Код: Выделить весь код
https://k2s.cc/file/3434w/0498start.mp4
результирующий:
Код: Выделить весь код
https://k2s.cc/file/uufyfidu/0498_start.avi | https://k2s.cc/file/3434w/0498start.mp4
Может быть нужно под второе задание новую тему создать?

Отправлено: 10:34, 30-01-2019 | #4


Ветеран


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

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


Цитата Alexander_88:
нужно, чтобы при сопоставлении, в имени файла игнорировался символ земли _
Такие символы встречаются только в old.txt. »
Пробуйте:
Скрытый текст
Код: Выделить весь код
$sOldFile    = 'C:\Мои проекты\0241\old.txt'
$sNewFile    = 'C:\Мои проекты\0241\new.txt'
$sResultFile = 'C:\Мои проекты\0241\result.txt'

Get-Content -Path $sNewFile | ForEach-Object -Begin {
        $hNewTable = @{}
    } -Process {
        $hNewTable.Add([IO.Path]::GetFileNameWithoutExtension($_), $_)
    }

Get-Content -Path $sOldFile | ForEach-Object -Process {
    $sOldName = ([IO.Path]::GetFileNameWithoutExtension($_)).Replace('_', '')

    if($hNewTable.ContainsKey($sOldName)) {
        "$($_) | $($hNewTable[$sOldName])"
    }
} | Set-Content -Path $sResultFile


Цитата Alexander_88:
Может быть нужно под второе задание новую тему создать? »
Нет, не нужно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:40, 30-01-2019 | #5


Ветеран


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

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


Iska, спасибо, работает все и быстро обрабатывает много ссылок

Отправлено: 20:26, 30-01-2019 | #6


Ветеран


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

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


Здравствуйте, спустя 4 года потребовалось обновление скрипта может кто нибудь сможет помочь исправить?
Теперь файлов типа new txt много (old.txt так и остался один). А также при сопоставлении, игнорировать знак земли _ в имени файла нужно как в old.txt как и в new.txt.
Во всех файлах типа new.txt не будет ссылок с повторяющимися именами файлов.. (не то, что в каждом, а прям во всех.. если склеить все эти файлы, не будет одинаковых имён в ссылках).
Пример:
old.txt
Код: Выделить весь код
https://k2s.cc/file/uufuhfdsidu/0498_start.mp4
https://k2s.cc/file/uuf5656du/0499start.avi
https://google.com/file/uufyfidu/0498start_m.jpg
new1.txt
Код: Выделить весь код
https://k2s.cc/file/uu11111du/0498start.mp4
https://k2s.cc/file/53685656du/0499start.mp4
new2.txt
Код: Выделить весь код
https://yandex.ru/file/uu7654443u/0498start_m.jpg
result.txt
Код: Выделить весь код
https://k2s.cc/file/uufuhfdsidu/0498_start.mp4  | https://k2s.cc/file/uu11111du/0498start.mp4
https://k2s.cc/file/uuf5656du/0499start.avi | https://k2s.cc/file/53685656du/0499start.mp4
https://google.com/file/uufyfidu/0498start_m.jpg | https://yandex.ru/file/uu7654443u/0498start_m.jpg

Отправлено: 18:14, 16-12-2023 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2013 - Как в ворде объединить несколько файлов и между ними вставить горизонтальные линии? megagogo Microsoft Office (Word, Excel, Outlook и т.д.) 0 01-03-2015 14:29
2008 R2 - Сервер 2008 и обмен между ними ДмитрийFefilatyev Windows Server 2008/2008 R2 7 08-04-2013 05:37
2 локальные сетки и broadcast между ними fenixekb Microsoft Windows NT/2000/2003 11 28-07-2008 12:06
Две сети, два Master browser-a и синхронизация NB-имён между ними! sergey1234567 Microsoft Windows NT/2000/2003 12 26-07-2007 14:03
2 подсети и роутинг между ними demonphp Сетевые технологии 2 21-05-2006 13:50




 
Переход