Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Замена части информации в файлах txt на имя папки (http://forum.oszone.net/showthread.php?t=351746)

Scooop 16-08-2022 15:44 2990567

Замена части информации в файлах txt на имя папки
 
Добрый день форумчане.
Нужна срочная помощь.
Есть группа файлов разложенная по разным папкам, файлы формата *.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 16-08-2022 17:59 2990575

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
}

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


Время: 08:23.

Время: 08:23.
© OSzone.net 2001-