Войти

Показать полную графическую версию : [решено] Замена ссылок, в которых сходится имя файла


Alexander_88
24-11-2015, 23:25
Здравствуйте, подскажите, пожалуйста, как можно сделать замену ссылок в txt файле? Заменять нужно по именам файлов (после последней косой черты). новые ссылки находятся в отдельном txt файле.

Файл в котором нужно сделать замену imagelink.txt

http://s7.depic.me/034341/r4dfsdfjfat9_o/0005swl_t.jpg
http://s7.depic.me/01421/o7thshjlpdom_o/0006swl_m.jpg
http://s7.depic.me/01421/ooljfhd5ub1_o/0006swl_t.jpg
http://s6.depic.me/01341/73ahjhj0cw18_o/0007swl_m.jpg
http://s5.depic.me/01341/c5ayuyu9ici_o/0007swl_t.jpg
http://s7.depic.me/01445/lw1jkhgzenx_o/0008swl_m.jpg
http://s7.depic.me/01445/jav5cbvxn78b_o/0008swl_t.jpg
http://s6.depic.me/01341/qq57sfdfgbbm_o/0009swl_m.jpg

Файл, в котором находятся новые ссылки: new.txt

http://s6.depic.me/01341/73aaaaaaa0cw18_o/0007swl_m.jpg
http://s7.depic.me/01421/ooljfbbbbbbbhd5ub1_o/0006swl_t.jpg

Результат после выполнения, imagelink.txt стал таким:

http://s7.depic.me/034341/r4dfsdfjfat9_o/0005swl_t.jpg
http://s7.depic.me/01421/o7thshjlpdom_o/0006swl_m.jpg
http://s7.depic.me/01421/ooljfbbbbbbbhd5ub1_o/0006swl_t.jpg
http://s6.depic.me/01341/73aaaaaaa0cw18_o/0007swl_m.jpg
http://s5.depic.me/01341/c5ayuyu9ici_o/0007swl_t.jpg
http://s7.depic.me/01445/lw1jkhgzenx_o/0008swl_m.jpg
http://s7.depic.me/01445/jav5cbvxn78b_o/0008swl_t.jpg
http://s6.depic.me/01341/qq57sfdfgbbm_o/0009swl_m.jpg

Foreigner
25-11-2015, 11:55
PowerShell:

$imagelink = get-content imagelink.txt

get-content new.txt | foreach {

$imagelink = $imagelink -replace ".+/$(([uri] $_).segments[-1])", $_

}

set-content imagelink.txt $imagelink

Alexander_88
25-11-2015, 14:12
Спасибо, все отлично работает. Единственная мелочь.., если в файле new.txt есть хоть одна пустая строка (не считая последней), то все ссылки в файле imagelink.tct режутся.. от них остается только имя файла и расширение. :)

Foreigner
25-11-2015, 14:34
Alexander_88, если пустая строка не нужна, то можно ее вообще игнорировать:

$imagelink = (get-content imagelink.txt) -match '.'

Alexander_88
25-11-2015, 15:07
добавил сюда строку

$imagelink = get-content imagelink.txt
$imagelink = (get-content imagelink.txt) -match '.'

get-content new.txt | foreach {

$imagelink = $imagelink -replace ".+/$(([uri] $_).segments[-1])", $_

}

set-content imagelink.txt $imagelink

Поставил на паузу, появляется такое сообщение




Не удается индексировать в массив NULL.
C:\OneDrive\work\new\restore image\zamena.ps1:6 знак:41
+ ... $imagelink = $imagelink -replace ".+/$(([uri] $_).segments[-1])", $_
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Не удается индексировать в массив NULL.
C:\OneDrive\work\new\restore image\zamena.ps1:6 знак:41
+ ... $imagelink = $imagelink -replace ".+/$(([uri] $_).segments[-1])", $_
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Не удается индексировать в массив NULL.
C:\OneDrive\work\new\restore image\zamena.ps1:6 знак:41
+ ... $imagelink = $imagelink -replace ".+/$(([uri] $_).segments[-1])", $_
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Не удается индексировать в массив NULL.
C:\OneDrive\work\new\restore image\zamena.ps1:6 знак:41
+ ... $imagelink = $imagelink -replace ".+/$(([uri] $_).segments[-1])", $_
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Для продолжения нажмите клавишу ВВОД...:


Может надо применить эту строчку на new.txt?
т.е. получается если есть хоть один пробел в new.txt, то замена проходит не правильно (все ссылки урезаются)

Foreigner
25-11-2015, 16:16
добавил сюда строку » Надо было заменить первую. Но даже в таком варианте у меня все отрабатывает

все отлично работает. »
Если первый вариант отрабатывал, значит версия повершел соответствует. Попробуйте на всякий случай так:

$imagelink = (get-content imagelink.txt) -match '.'

get-content new.txt | foreach {

$imagelink = $imagelink -replace ".+/$([regex]::escape(([uri] $_).segments[$_.segments.count - 1]))", $_

}

set-content imagelink.txt $imagelink

Alexander_88
25-11-2015, 17:25
Но даже в таком варианте у меня все отрабатывает »
странно, а вы пробовали пустых строк добавить в new.txt? например просто в самую последнюю строку курсор установить и раз 6 энтер нажать?
так то у меня все работает, не работает только, когда в new.txt есть пустышки

Foreigner
25-11-2015, 17:28
Alexander_88, Нет, тогда измените:

...
(get-content new.txt) -match '.' | foreach {

...

Alexander_88
25-11-2015, 17:40
Спасибо, теперь пустые строки не проблема :yahoo:




© OSzone.net 2001-2012