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

Alexander_88 24-11-2015 23:25 2578644

Замена ссылок, в которых сходится имя файла
 
Здравствуйте, подскажите, пожалуйста, как можно сделать замену ссылок в 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 2578726

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 2578756

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

Foreigner 25-11-2015 14:34 2578768

Alexander_88, если пустая строка не нужна, то можно ее вообще игнорировать:
Код:

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

Alexander_88 25-11-2015 15:07 2578780

добавил сюда строку

Код:

$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 2578792

Цитата:

Цитата Alexander_88
добавил сюда строку »

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

Цитата:

Цитата Alexander_88
все отлично работает. »

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

$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 2578825

Цитата:

Цитата Foreigner
Но даже в таком варианте у меня все отрабатывает »

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

Foreigner 25-11-2015 17:28 2578826

Alexander_88, Нет, тогда измените:
Код:

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

...


Alexander_88 25-11-2015 17:40 2578829

Спасибо, теперь пустые строки не проблема :yahoo:


Время: 03:05.

Время: 03:05.
© OSzone.net 2001-