Любой язык - Замена части информации в файлах txt на имя папки

Ответить
Аватара пользователя
Scooop

Любой язык - Замена части информации в файлах txt на имя папки

Сообщение Scooop »

Добрый день форумчане.

Нужна срочная помощь.

Есть группа файлов разложенная по разным папкам, файлы формата *.22O, но внутри обычный txt.

Суть задачи:

1. Найти все файлы в подкаталогах исходного каталога, при этом нужны файлы в пути к которым присутствует слово rinex.

*\12345\2\20220609\472593\Кожино_КТ_001\файлы данных в формате rinex\K0011600.22o - этот должен быть найден

*\12345\2\20220609\ДГС Сергиев Посад\SPSS_090622.0510_090622.1520_730321.22o - этот НЕ должен меняться



2. В найденных файлах, нужно заменить данные в строке 4 и 5



2 OBSERVATION DATA M RINEX VERSION / TYPE

LEICA GEO OFFICE 7.0 10-6-22 15:40 PGM / RUN BY / DATE

Ткачук В.С. АО ВАГП OBSERVER / AGENCY

0001 MARKER NAME

0001 MARKER NUMBER

472593 LEICA GX1230GG 7.01 REC # / TYPE / VERS

08500004 LEIAX1202GG ANT # / TYPE

2743318.5900 2240299.1118 5286791.3241 APPROX POSITION XYZ

1.6890 0.0000 0.0000 ANTENNA: DELTA H/E/N



На имя папки на два уровня выше *\12345\2\20220609\472593\Кожино_КТ_001\файлы данных в формате rinex\K0011600.22o

При этом количество заменяемых символов должно соответствовать длине нового имени, т.е. выделяются старые данные + пробелы.



В итоге получается так:



2 OBSERVATION DATA M RINEX VERSION / TYPE

LEICA GEO OFFICE 7.0 10-6-22 15:40 PGM / RUN BY / DATE

Ткачук В.С. АО ВАГП OBSERVER / AGENCY

Кожино_КТ_001 MARKER NAME

Кожино_КТ_001 MARKER NUMBER

472593 LEICA GX1230GG 7.01 REC # / TYPE / VERS

08500004 LEIAX1202GG ANT # / TYPE

2743318.5900 2240299.1118 5286791.3241 APPROX POSITION XYZ

1.6890 0.0000 0.0000 ANTENNA: DELTA H/E/N
Аватара пользователя
DJ Mogarych

Re: Любой язык - Замена части информации в файлах txt на имя папки

Сообщение DJ Mogarych »

Powershell:



Код:

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

dir "D:\temp\12345" -Recurse |? {!$_.psiscontainer -and $_.fullname -match "rinex"} |% {
$r = $_.fullname.split('\')[-3]
$txt = (gc $_.FullName) -replace "\d{4}( MARKER (NAME|NUMBER))",($r + '$1')
$txt |Set-Content $_.fullname
}

Особенно не тестировал, проверьте сначала на пробном наборе данных.
Ответить

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