Компьютерный форум 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=352961)

minutka15 02-02-2023 19:15 3002294

Нумерация строк кроме первой
 
Есть текстовый файл 1.txt где нужно пронумеровать все строки не затрагивая при этом самую верхнюю.

Что-бы стало

Постоянная строка
1=Строка один
2=Строка два
3=Еще строка

При помощи батника пронумеровываю


Код:

@echo off
<1.txt>$ (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @<nul set /p="%%a=%%b"& echo:)& >nul move $ 2.txt

Однако пронумеровывается и верхняя строка.

Как пронумеровать без затрагивания верхней строки ?

DJ Mogarych 02-02-2023 20:10 3002296

Это CSV с заголовком, что ли?

minutka15 02-02-2023 21:12 3002301

Цитата:

Цитата DJ Mogarych
Это CSV с заголовком, что ли? »

Нет, это ini файл.
Что-бы решить эту проблему я сперва удаляю первую строку
Код:

@Echo Off
more +1 "1.txt" >"1.txt.new"
move /y "1.txt.new" "1.txt" >nul

Затем пронумеровываю
Код:

@echo off
<1.txt>$ (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @<nul set /p="%%a=%%b"& echo:)& >nul move $ 2.txt

И в последнюю очередь добавляю Постоянную строку
Код:

Set "Mask=1.txt"
Set "Str=Постоянная строка"
FOR %%f IN ("%Mask%") DO (
more +1 %Mask% > "%%f.tmp"
(Echo %Str% &More "%%f")>"%%f.tmp"
        Move /Y "%%f.tmp" "%%f" >nul
)
exit /b

Получается как нужно но через белиберду
А хотелось бы одной строкой...

DJ Mogarych 02-02-2023 22:22 3002305

Powershell
Код:

$iniFile = "C:\temp\from\1.txt"

$ini = ($ini = gc $iniFile) |% {
    if ($ini.IndexOf($_) -ne 0) {$_ -replace "^","$($ini.IndexOf($_))="}
    else {$_}
}
$ini |Set-Content $iniFile

Результат
Код:

Начало
1=один
2=два
3=три
4=четыре
5=пять
6=шесть
7=семь
8=восемь
9=девять
10=десять
11=одиннадцать
12=двенадцать
13=тринадцать
14=четырнадцать
15=пятнадцать
16=шестнадцать
17=семнадцать
18=восемнадцать
19=девятнадцать
20=двадцать


megaloman 03-02-2023 09:42 3002330

Вариант?
Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\1.ini"
        Set "FileOut=Z:\Box_In\1.ini.new"
       
        Set /A n=100000, i=0
        Set /P @@%n%=<"%FileIn%"
        FOR /F "usebackq delims=" %%b In (`2^>nul More +1 "%FileIn%"`) DO (
                Set /A n+=1, i=i+1
                Call Set "@@%%n%%=%%i%%=%%b"
        )
        >"%FileOut%" (FOR /F "usebackq tokens=1* delims==" %%b In (`2^>nul Set "@@"`) DO Echo %%c)
pause
Exit /B 0

FileIn и FileOut могут совпадать

El Sanchez 03-02-2023 13:37 3002356

Вариант 2?
Код:

@echo off
(set i=0&for /f "tokens=1* delims=:" %%a in ('findstr /R /N "^" 1.txt') do if "%%~a"=="1" (echo:%%b) else (set /a i+=1&&call echo:%%i%%=%%b))>2.txt


minutka15 03-02-2023 15:19 3002361

Вчера перед сном стал изобретать велосипед а изобрел самокат.

Код:

@echo off
Set "Mask=1.ini"
Set "Str=Постоянная строка"
more +1 "%Mask%" >"1.ini.new"
move /y "1.ini.new" "%Mask%" >nul
<%Mask%>$ (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @<nul set /p="%%a=%%b"& echo:)& >nul move $ %Mask%
FOR %%f IN ("%Mask%") DO (
more +1 %Mask% > "%%f.tmp"
(Echo %Str% &More "%%f")>"%%f.tmp"
        Move /Y "%%f.tmp" "%%f" >nul
)
exit /b

Батник сперва удаляет "Постоянная строка", затем идет нумерация и в конце добавляет "Постоянная строка".
Стыдно конечно за такой батник но тем не менее от рабочий.

megaloman,
Ваш батник делает все как надо - супер! Спасибо огромное!

El Sanchez,
Ваш вариант отличный, в одну строку!
Спасибо огромное!
добавил
move /y "2.txt" "1.txt" >nul
и получил что хотел.

Спасибо всем.

Тема решена


Время: 07:23.

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