Войти

Показать полную графическую версию : [решено] Добавление нумерации


minutka15
14-01-2023, 21:41
Есть ini файл такого содержания:

[count]
1=любая текстовая строка
2=любая текстовая строка
3=любая текстовая строка
4=любая текстовая строка
и т.д

После обработки файла нужен такой результат:

[count]
1=1
2=2
3=3
4=4
и т.д

Можно ли получить такой результат коротким батником?

DJ Mogarych
15-01-2023, 10:21
Powershell

$text = "C:\temp\list.txt"
$delim = '='
$result = "C:\temp\list2.txt"

$list = (Get-Content $text) -notmatch '^\[' |% {
$str = $_ -split $delim
$str[0] + $delim + $str[0]
}

$list > $result

minutka15
15-01-2023, 15:13
DJ Mogarych,
$text = "C:\temp\list.txt"
$delim = '='
$result = "C:\temp\list2.txt"
$list = (Get-Content $text) -notmatch '^\[' |% {
$str = $_ -split $delim
$str[0] + $delim + $str[0]
}
$list > $result »
Спасибо за помощь!
Но код у меня не работает, ничего не происходит..

Foreigner
15-01-2023, 17:22
(Get-Content file.ini) -replace '(.+)=.+', '$1=$1' | Set-Content file.ini

DJ Mogarych
15-01-2023, 17:38
Лаконично и красиво, но если в строке несколько =, то работать не будет.

[count]
1=любая текст=1=любая текст
2=люб=аer[ojt'peoh93h=2=люб=аer[ojt'peoh93h
3=3
4=4
8=8


Уточнённый вариант, вроде работает

$file = "C:\temp\list.txt"
(Get-Content $file) -replace '^(.+?)=.+', '$1=$1' |Set-Content $file

megaloman
15-01-2023, 17:44
@Echo Off
cls
>nul chcp 1251
Set "FileIn=Z:\Box_In\Есть ini файл такого содержания.ini"

>"%FileIn%.~tmp" (FOR /F "usebackq tokens=1* delims==" %%i In (`2^>nul More "%FileIn%"`) DO (
If "%%j"=="" (Echo %%i) Else (Echo %%i=%%i)
))
>nul Move /Y "%FileIn%.~tmp" "%FileIn%"
pause
Exit /B 0

minutka15
15-01-2023, 20:01
Спасибо всем за помощь!

DJ Mogarych,
Запускаю из одной папки где и сам ini файл прописав $file = "1.ini"
но к сожалению ничего не происходит ...

Foreigner,
(Get-Content 1.ini) -replace '(.+)=.+', '$1=$1' | Set-Content 1.ini
То-же самое...

megaloman,
Ваш скрипт мгновенно решает проблему, Запустил и точка!
Как раз нужен был именно батник.
Спасибо огромное!!!

DJ Mogarych
15-01-2023, 20:21
Прописали бы полный путь, вопросов бы не было.

minutka15
15-01-2023, 20:53
Прописали бы полный путь, вопросов бы не было. »

Ну прописать можно как угодно, powershell видит так-же и путь в своей директории...
В ранних скриптах я так же и клал в одну директорию и все работало.

Ну вот прописал и скриншот с результатом:
https://i.postimg.cc/HsTs51n9/1.png (https://postimg.cc/5jkVdGwX)

А тут скрипт от megaloman, скриншот с результатом:
https://i.postimg.cc/x1WwvLgV/2.png (https://postimg.cc/QFJYs9Rf)

YuS_2
15-01-2023, 22:11
Уточнённый вариант »
минуточку-минуточку... простите за каламбур... :)
Сейчас ведь выяснится, что менять надо было не во всем файле, а в определенной секции(ях)... а там, может ещё какие подробности вылезут... поэтому:
Я бы порекомендовал для случая с powershell, не изобретать наших велосипедов, а воспользоваться уже готовым решением:
install-module psini
на запрос дать разрешение установки... (можно, конечно, из модуля повыдергивать функции и использовать их в скрипте, но так проще, да и практичнее).
после чего уже производить с файлом конфигурации необходимые манипуляции...
например, для случая, обозначенного ТС-ом в первом сообщении, строго по условиям:
$fin_ini = '.\conf.ini'
$fout_ini = '.\out.ini'
$sec = 'count' # имя секции

$fini = gic $fin_ini -ign

for ($i = 0;$i -lt $fini[$sec].count;$i++){
#$fini[$sec][$i] = $fini[$sec].keys[$i]
# .split("`n") - для PS 5.1, почему-то коллекции работают некорректно
# $fini.$sec[$i] = $fini.$sec.keys.split("`n")[$i] # строка работала неверно, закомментирована...
$fini.$sec[$i] = ($fini.$sec|%{$_.keys})[$i] # эта строка работает более корректно.
}

oif -inp $fini -file $fout_ini -force

DJ Mogarych
15-01-2023, 22:26
YuS_2, автор, кажется, уверился в том, что пауэршелл - это неработающая шляпа и вполне доволен рабочим решением на CMD, стоит ли копать глубже?

YuS_2
15-01-2023, 22:36
это неработающая шляпа и вполне доволен рабочим решением на CMD, стоит ли копать глубже? »
А это было больше, даже не для ТС, а для тех, кто использует powershell... его разработчики, видимо, очень не любят конфигурационные файлы или решили их просто "похоронить", т.к. никакого встроенного средства для работы с ними, вообще не предусмотрели... но тем и хорош powershell, что недостающие функции можно добавлять.
А по поводу тех, кто не любит/боится летать самолетами... ну, как их заставишь, особенно если у них присутствует фобия? Пусть передвигаются на самокатах... в итоге, ведь, доехать можно из пункта А в пункт Б... каждый выбирает транспорт по своему вкусу. :)
Вот, ещё ссылку добавлю, на всякий случай, на гитхаб, где лежат исходники psini
https://github.com/lipkau/PsIni




© OSzone.net 2001-2012