Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Аватара пользователя
Alexander_88

Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Сообщение Alexander_88 »

Здравствуйте, подскажите как сделать такое на powershell или bath ?



есть несколько txt файлов.. в каждом txt ссылки одного из нескольких типов..



пример одного из типов:





Код:

Код: Выделить всё

https://google.com/file/6c616b50641a8/0001start.mp4
https://google.com/file/f0bafe33ee86d/0002start.mp4
https://google.com/file/82c4d96027879/0003start.mp4
https://google.com/file/2ca5c2ed414b6/0004start.mp4
https://google.com/file/8e616f8c54ce8/0005start.mp4
https://google.com/file/484651ad8773a/0006start.mp4
https://google.com/file/a0abb050c39f5/0007start.mp4
https://google.com/file/e93fb78dbcfcf/0008start.mp4
https://google.com/file/613bf9cc27632/0009start.mp4
https://google.com/file/e95ba702a2557/0010start.mp4
https://google.com/file/c7f25a80f361d/0011start.mp4
https://google.com/file/deletelink/0012start.mp4
https://google.com/file/bd95035d50f7a/0013start.mp4
https://google.com/file/deletelink/0014start.mp4
https://google.com/file/c5b0e8bc53652/0015start.mp4
https://google.com/file/deletelink/0016start.mp4
https://google.com/file/2ca4038062eb9/0017start.mp4
https://google.com/file/deletelink/0018start.mp4
https://google.com/file/976582ec7e383/0019start.mp4
https://google.com/file/20ab0d8a2856c/0020start.mp4
https://google.com/file/deletelink/0021start.mp4
https://google.com/file/df3b1c7694b27/0022start.mp4
https://google.com/file/deletelink/0023start.mp4
https://google.com/file/deletelink/0024start.mp4
https://google.com/file/9ce184ff0b163/0025start.mp4
https://google.com/file/es5gscfcf/0008start.mp4
https://google.com/file/c5bfgju3652/0015start.mp4
https://google.com/file/dwtgink/0021start.mp4

бывают txt с другими типами.. отличие в основном в имени файла, расширения разные, есть txt где в имени файла присутствует знак земли _ (примеры типов имен файлов.. 0024start.mp4, start0024.mp4, 0024start_m.jpg, start0024_m.jpg (буква после земли может быть другая).

Но как я говорил в одном txt файлы только какого - нибудь одного типа, необходимо либо несколько скриптов под разные типы файлов, либо один универсальный (если это возможно).

Теперь к тому, что должен делать скрипт Изображение



в каждом txt файле список ссылок, в конце которых есть имя файла... в составе имени файла обязательно есть номер, состоящий из 4ех цифр... номер этих цифр идет по порядку, начиная с 0001 (0001 - первая ссылка, 0002 - вторая ссылка, 0003 третья ссылка и т.д.). В какой то момент порядок нарушается, и идут ссылки, которые должны заменить тех, что выше (находить тех, которых заменить нужно по номеру), ссылка должна замениться полностью.



Другими словами нужно выполнить замену ссылок со старых на новые.. старые выше, новые ниже, определять по 4ех значному номеру в имени файла. За место старых ссылок должны встать новые, а новые со своих мест (снизу) удалиться. Дубликатов в новых ссылках не будет, номера у них будут разные.. такие же номера 100% будут в старых ссылках. txt файлы должны заменится на новые после применения скрипта. Из примера выше, после применения скрипта, txt файл должен стать таким..







Код:

Код: Выделить всё

https://google.com/file/6c616b50641a8/0001start.mp4
https://google.com/file/f0bafe33ee86d/0002start.mp4
https://google.com/file/82c4d96027879/0003start.mp4
https://google.com/file/2ca5c2ed414b6/0004start.mp4
https://google.com/file/8e616f8c54ce8/0005start.mp4
https://google.com/file/484651ad8773a/0006start.mp4
https://google.com/file/a0abb050c39f5/0007start.mp4
https://google.com/file/es5gscfcf/0008start.mp4
https://google.com/file/613bf9cc27632/0009start.mp4
https://google.com/file/e95ba702a2557/0010start.mp4
https://google.com/file/c7f25a80f361d/0011start.mp4
https://google.com/file/deletelink/0012start.mp4
https://google.com/file/bd95035d50f7a/0013start.mp4
https://google.com/file/deletelink/0014start.mp4
https://google.com/file/c5bfgju3652/0015start.mp4
https://google.com/file/deletelink/0016start.mp4
https://google.com/file/2ca4038062eb9/0017start.mp4
https://google.com/file/deletelink/0018start.mp4
https://google.com/file/976582ec7e383/0019start.mp4
https://google.com/file/20ab0d8a2856c/0020start.mp4
https://google.com/file/dwtgink/0021start.mp4
https://google.com/file/df3b1c7694b27/0022start.mp4
https://google.com/file/deletelink/0023start.mp4
https://google.com/file/deletelink/0024start.mp4
https://google.com/file/9ce184ff0b163/0025start.mp4

т.е. осталось 25 ссылок, идущих по порядку по номеру, остальные 3, которые были ниже, заменили собой тех, которые были выше, найдя их по номеру Изображение
Аватара пользователя
Foreigner

Re: Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Сообщение Foreigner »

Нужно проверить, сравнить list-in.txt и list-out.txt, но вроде все корректно





Код:

Код: Выделить всё

[uri[]] $urls = Get-Content list-in.txt
$urls | Group-Object { $_.Segments[-1] } | Foreach-Object { $_.Group[-1].OriginalString } | Set-Content list-out.txt
Аватара пользователя
megaloman

Re: Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Сообщение megaloman »

Цитата Foreigner:



Нужно проверить, сравнить list-in.txt и list-out.txt, но вроде все корректно
Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера




Спасибо, проверил через онлайн сервис сравнения двух тхт, все нормально.. А можно сделать, чтобы определяло именно по номеру файла, игнорируя имя и расширение? (ссылку также заменять полностью на новую).

и вопросик. если мне нужно таким образом проверить 50 txt файлов, и заменить оригиналы, на то, что результировал скрипт, нужно так делать?





Код:

Код: Выделить всё

[uri[]] $urls = Get-Content list-in.txt
$urls | Group-Object { $_.Segments[-1] } | Foreach-Object { $_.Group[-1].OriginalString } | Set-Content list-in.txt

и перекопировать этот код 50 раз изменяя имена файлов? ничего не нарушится при этом?
Аватара пользователя
Alexander_88

Re: Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Сообщение Alexander_88 »

Цитата Alexander_88:



А можно сделать, чтобы определяло именно по номеру файла, игнорируя имя и расширение?
Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера




Как-то так, опять же проверьте



Код:

Код: Выделить всё

[uri[]] $urls = gc list-in.txt
$urls | group-object { $_.Segments[-1] -replace '(?


Цитата Alexander_88:



если мне нужно таким образом проверить 50 txt файлов, и заменить оригиналы, на то, что результировал скрипт, нужно так делать?
Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера




Можно, нужно завернуть в цикл:





Код:

Код: Выделить всё

$files = dir *.txt                     # Ваши *.txt файлы
foreach ($file in $files)
{
    [uri[]] $urls = Get-Content $file
    $urls | Group-Object { $_.Segments[-1] -replace '(?
Аватара пользователя
Foreigner

Re: Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Сообщение Foreigner »

Цитата Foreigner:



Как-то так, опять же проверьте
Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера




Спасибо, завтра обязательно проверю, сегодня уже нет возможности..






Цитата Foreigner:



Можно, нужно завернуть в цикл:
Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера




а если пути файлов разные, я могу их через запятую перечислить? Пока не могу протестировать, только завтра... просто заранее спросил на всякий случай Изображение
Аватара пользователя
Foreigner

Re: Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Сообщение Foreigner »

Foreigner, попробовал второй вариант, но как будто бы ничего не поменялось.. также зависит от имени и расширения а не только от номера.. т.е. заменяет, если полностью совпадает имя файла (номер имя и расширение) Изображение
Аватара пользователя
Foreigner

Re: Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Сообщение Foreigner »

Foreigner, попробовал второй вариант, но как будто бы ничего не поменялось.. также зависит от имени и расширения а не только от номера.. т.е. заменяет, если полностью совпадает имя файла (номер имя и расширение) Изображение
Аватара пользователя
Alexander_88

Re: Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Сообщение Alexander_88 »

Код:

Код: Выделить всё

@Echo Off &Cls
>nul Chcp 1251
SetLocal EnableDelayedExpansion
	Call :MyDir "Z:\Box_In\*.txt" "Z:\Box_Out" 
	Call :MyDir "Z:\Soft_In\*.txt" "Z:\Soft_In" 
Pause
Exit /B
:MyDir
	FOR %%f In (%1) DO Call :Replace "%%f" %2
Exit /B
:Replace
	Echo %1 -^> %2
	For /F "usebackq tokens=3 delims=:" %%i In (`2^>nul Find /C ":" %1`) Do Set /A N=%%i
	If %N% EQU 0 (Exit /B 1)
	Set /A N+=10000
	>"%~2\%~nx1.tmp" (For /L %%i In (10001,1,%N%) Do (
		Set /A M=%%i
		Set "M=/.*!M:~1!.*\..*"
		Set "SS="
		For /F "usebackq delims=" %%s In (`2^>nul FindStr /R /E /C:"!M!" %1`) Do Set "SS=%%s"
		If Not "!SS!"=="" (Echo !SS!)
	))
	>nul Move /Y "%~2\%~nx1.tmp" "%~2\%~nx1"
Exit /B

Скрипт просматривает файлы по указанной маске в указанной папке и помещает результаты в другую папку.

Папки могут и совпадать

A если пути файлов разные для каждого пишем свой Call :MyDir
Аватара пользователя
Alexander_88

Re: Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера

Сообщение Alexander_88 »

Цитата Alexander_88:



Foreigner, попробовал второй вариант, но как будто бы ничего не поменялось..
Любой язык - [решено] Заменить ссылки в txt файле, найдя одинаковые номера




заметил, что строк стало меньше почему то
Ответить

Вернуться в «Скриптовые языки администрирования Windows»