PDA

Показать полную графическую версию : Сопоставить ссылки рядом, между ними установить символ.


Alexander_88
30-01-2019, 00:43
Здравствуйте, решение нужно на 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

Iska
30-01-2019, 04:56
В new.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
файла:
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

Alexander_88
30-01-2019, 09:48
Спасибо, работает. Да, скрипта не было, результирующий файл руками составлял и ошибся :(

Alexander_88
30-01-2019, 10:34
Этот вариант скрипта основной, еще нужно дополнительный, все точно также, только нужно, чтобы при сопоставлении, в имени файла игнорировался символ земли _
Такие символы встречаются только в 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

Может быть нужно под второе задание новую тему создать?

Iska
30-01-2019, 19:40
нужно, чтобы при сопоставлении, в имени файла игнорировался символ земли _
Такие символы встречаются только в 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
30-01-2019, 20:26
Iska, спасибо, работает все и быстро обрабатывает много ссылок :)

Alexander_88
16-12-2023, 18:14
Здравствуйте, спустя 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




© OSzone.net 2001-2012