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

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

Ответить
Настройки темы
CMD/BAT - [решено] Замена ссылок, в которых сходится имя файла

Ветеран


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

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


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

Отправлено: 23:25, 24-11-2015

 

Ветеран


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

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


PowerShell:
Код: Выделить весь код
$imagelink = get-content imagelink.txt

get-content new.txt | foreach {

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

}

set-content imagelink.txt $imagelink
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:55, 25-11-2015 | #2



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

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


Ветеран


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

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


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

Отправлено: 14:12, 25-11-2015 | #3


Ветеран


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

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


Alexander_88, если пустая строка не нужна, то можно ее вообще игнорировать:
Код: Выделить весь код
$imagelink = (get-content imagelink.txt) -match '.'
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:34, 25-11-2015 | #4


Ветеран


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

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


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

Код: Выделить весь код
$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, то замена проходит не правильно (все ссылки урезаются)

Отправлено: 15:07, 25-11-2015 | #5


Ветеран


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

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


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

Последний раз редактировалось Foreigner, 25-11-2015 в 17:24.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:16, 25-11-2015 | #6


Ветеран


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

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


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

Отправлено: 17:25, 25-11-2015 | #7


Ветеран


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

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


Alexander_88, Нет, тогда измените:
Код: Выделить весь код
...
(get-content new.txt) -match '.' | foreach {

...
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:28, 25-11-2015 | #8


Ветеран


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

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


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

Отправлено: 17:40, 25-11-2015 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Умная замена ссылок в тхт файлах Alexander_88 Скриптовые языки администрирования Windows 0 11-10-2015 17:54
Любой язык - [решено] замена ссылок Alexander_88 Скриптовые языки администрирования Windows 2 08-05-2015 18:28
Разное - Замена ссылок в swf(файл без защиты) sib_dexter Программирование и базы данных 0 05-04-2014 12:16
CMD/BAT - [решено] Имя файла из строки копируемого файла. Seryoga204 Скриптовые языки администрирования Windows 20 16-03-2011 21:15
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28




 
Переход