Нумерация строк кроме первой
Есть текстовый файл 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 с заголовком, что ли?
|
Цитата:
Цитата 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=двадцать
|
Вариант?
Код:
@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
|
Вчера перед сном стал изобретать велосипед а изобрел самокат.
Код:
@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.
© OSzone.net 2001-