CMD/BAT - [решено] Добавление нумерации

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

CMD/BAT - [решено] Добавление нумерации

Сообщение minutka15 »

Есть ini файл такого содержания:



[count]

1=любая текстовая строка

2=любая текстовая строка

3=любая текстовая строка

4=любая текстовая строка

и т.д



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



[count]

1=1

2=2

3=3

4=4

и т.д



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

Re: CMD/BAT - [решено] Добавление нумерации

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

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

Re: CMD/BAT - [решено] Добавление нумерации

Сообщение minutka15 »

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
CMD/BAT - [решено] Добавление нумерации




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

Но код у меня не работает, ничего не происходит..
Аватара пользователя
Foreigner

Re: CMD/BAT - [решено] Добавление нумерации

Сообщение Foreigner »

Код:

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

(Get-Content file.ini) -replace '(.+)=.+', '$1=$1' | Set-Content file.ini
Аватара пользователя
DJ Mogarych

Re: CMD/BAT - [решено] Добавление нумерации

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

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



Код:

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

[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

Re: CMD/BAT - [решено] Добавление нумерации

Сообщение megaloman »

Код:

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

@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

Re: CMD/BAT - [решено] Добавление нумерации

Сообщение minutka15 »

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



DJ Mogarych,

Запускаю из одной папки где и сам ini файл прописав $file = "1.ini"

но к сожалению ничего не происходит ...



Foreigner,

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

То-же самое...



megaloman,

Ваш скрипт мгновенно решает проблему, Запустил и точка!

Как раз нужен был именно батник.

Спасибо огромное!!!
Аватара пользователя
DJ Mogarych

Re: CMD/BAT - [решено] Добавление нумерации

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

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

Re: CMD/BAT - [решено] Добавление нумерации

Сообщение minutka15 »

Цитата DJ Mogarych:



Прописали бы полный путь, вопросов бы не было.
CMD/BAT - [решено] Добавление нумерации




Ну прописать можно как угодно, powershell видит так-же и путь в своей директории...

В ранних скриптах я так же и клал в одну директорию и все работало.



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



Скрытый текст

[spoiler]
[/spoiler]






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



Скрытый текст

[spoiler]
[/spoiler]
Аватара пользователя
YuS_2

Re: CMD/BAT - [решено] Добавление нумерации

Сообщение YuS_2 »

Цитата DJ Mogarych:



Уточнённый вариант
CMD/BAT - [решено] Добавление нумерации




минуточку-минуточку... простите за каламбур... Изображение

Сейчас ведь выяснится, что менять надо было не во всем файле, а в определенной секции(ях)... а там, может ещё какие подробности вылезут... поэтому:

Я бы порекомендовал для случая с 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
Ответить

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