Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Сопоставить ссылки рядом, между ними установить символ. (http://forum.oszone.net/showthread.php?t=338967)

Alexander_88 30-01-2019 00:43 2855265

Сопоставить ссылки рядом, между ними установить символ.
 
Здравствуйте, решение нужно на 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 2855274

Цитата:

Цитата 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


Alexander_88 30-01-2019 09:48 2855300

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

Alexander_88 30-01-2019 10:34 2855314

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

Цитата:

Цитата 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
Может быть нужно под второе задание новую тему создать? »

Нет, не нужно.

Alexander_88 30-01-2019 20:26 2855435

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

Alexander_88 16-12-2023 18:14 3021599

Здравствуйте, спустя 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



Время: 11:20.

Время: 11:20.
© OSzone.net 2001-