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

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

minutka15 14-01-2023 21:41 3000964

Добавление нумерации
 
Есть ini файл такого содержания:

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

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

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

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

DJ Mogarych 15-01-2023 10:21 3000979

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 3000988

DJ Mogarych,
Цитата:

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

Код:

(Get-Content file.ini) -replace '(.+)=.+', '$1=$1' | Set-Content file.ini

DJ Mogarych 15-01-2023 17:38 3000996

Лаконично и красиво, но если в строке несколько =, то работать не будет.
Код:

[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 3000999

Код:

@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 3001012

Спасибо всем за помощь!

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 3001013

Прописали бы полный путь, вопросов бы не было.

minutka15 15-01-2023 20:53 3001014

Цитата:

Цитата DJ Mogarych
Прописали бы полный путь, вопросов бы не было. »

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

Ну вот прописал и скриншот с результатом:
Скрытый текст


А тут скрипт от megaloman, скриншот с результатом:
Скрытый текст

YuS_2 15-01-2023 22:11 3001019

Цитата:

Цитата DJ Mogarych
Уточнённый вариант »

минуточку-минуточку... простите за каламбур... :)
Сейчас ведь выяснится, что менять надо было не во всем файле, а в определенной секции(ях)... а там, может ещё какие подробности вылезут... поэтому:
Я бы порекомендовал для случая с 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 3001020

YuS_2, автор, кажется, уверился в том, что пауэршелл - это неработающая шляпа и вполне доволен рабочим решением на CMD, стоит ли копать глубже?

YuS_2 15-01-2023 22:36 3001022

Цитата:

Цитата DJ Mogarych
это неработающая шляпа и вполне доволен рабочим решением на CMD, стоит ли копать глубже? »

А это было больше, даже не для ТС, а для тех, кто использует powershell... его разработчики, видимо, очень не любят конфигурационные файлы или решили их просто "похоронить", т.к. никакого встроенного средства для работы с ними, вообще не предусмотрели... но тем и хорош powershell, что недостающие функции можно добавлять.
А по поводу тех, кто не любит/боится летать самолетами... ну, как их заставишь, особенно если у них присутствует фобия? Пусть передвигаются на самокатах... в итоге, ведь, доехать можно из пункта А в пункт Б... каждый выбирает транспорт по своему вкусу. :)

Вот, ещё ссылку добавлю, на всякий случай, на гитхаб, где лежат исходники psini
https://github.com/lipkau/PsIni


Время: 23:53.

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