Копирование\перенос строк с 1.txt до определённой строки\секции в 2.txt.
И так задача:
Необходимо с файла TXTSETUP1.txt вырезать все строки до секции [BootBusExtenders.Load] в TXTSETUP2.txt
В общем итоге мне нужно:
С файла TXTSETUP1.txt до секции [BootBusExtenders.Load] перенесло всё в TXTSETUP2.txt а в TXTSETUP1.txt все осталось начиная с секции [BootBusExtenders.Load] .
Ну как бы разбить их по определённой секции или строке\слову.
Нумерация не покатит та свыше 5000 строк и они меняются.
За ранние всем спасибо.
|
Код:
@echo off
setlocal
set "file=TXTSETUP1.tmp"
for /f "tokens=1,2 delims=:" %%i in ('findstr /n "^" TXTSETUP1.txt') do call:1 %%i "%%j"
for %%i in (*.tmp) do move /y %%i %%~ni.txt
goto:eof
:1
if %2=="[BootBusExtenders.Load]" set file=TXTSETUP2.tmp
1>>%file% (
if %2=="" (echo.) else (echo %~2)
)
|
Спасибо за ответ,но что то не работает,файл от win xp TXTSETUP.SIF.
|
crimes,
Батники не совсем подходят для таких задач (работа с текстом). Варианты на PowerShell:
Код:
$a = gc .\TXTSETUP.SIF
$file = ".\1.txt"
$a | % {
if ($_ -eq "[BootBusExtenders.Load]") { $file = ".\2.txt" }
add-content $file $_
}
Вариант побыстрей:
Код:
$a = gc .\TXTSETUP.SIF
for ($i = 0; $i -le ($a.count-1); $i++ ) {
if ($a[$i] -eq "[BootBusExtenders.Load]") { $ind = $i; break }
}
set-content .\1.txt $a[0..($ind-1)]
set-content .\2.txt $a[$ind..($a.count-1)]
С помощью sed:
Код:
@echo off
setlocal
for /f %%i in ('sed -n "/\[BootBusExtenders\.Load\]/ =" TXTSETUP.SIF') do set "str=%%i"
sed -n "%str%,$ p" TXTSETUP.SIF > 2.txt
set /a str-=1
sed -n "1,%str% p" TXTSETUP.SIF > 1.txt
|
BAT-файл.
Код:
@ECHO OFF
FOR /F "tokens=1 delims=:" %%I IN ('FINDSTR /N /L [BootBusExtenders.Load]^<TXTSETUP1.SIF') DO (
SET VAR1=%%I
)
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=1* delims=]" %%I IN ('FIND /N /V ""^<TXTSETUP1.SIF') DO (
SET VAR2=%%I
SET VAR3=!VAR2:~1!
SET VAR4=%%J
IF !VAR3! LSS %VAR1% (
IF DEFINED VAR4 (
SET /P VAR5="%%J" 0>nul 1>>TXTSETUP2.SIF
ECHO.>>TXTSETUP2.SIF
) ELSE (
ECHO.>>TXTSETUP2.SIF
)) ELSE (
IF DEFINED VAR4 (
SET /P VAR5="%%J" 0>nul 1>>temp.txt
ECHO.>>temp.txt
) ELSE (
ECHO.>>temp.txt
)))
MOVE temp.txt TXTSETUP1.SIF
ECHO All's ready! Press any key to exit.
PAUSE>nul
|
Всем спасибо, всё работает.
|
Цитата crimes:
И все корректно работает? И нигде не проглатывает восклицательные знаки?
Код:
[DiskDriverMap]
abiosdsk = "%1 МБ диск Micro Channel"
atdisk = "%1 МБ диск IDE/ESDI"
disk = "%1 МБ диск %2 ID %3 шина %4 на %5"
Код:
[DiskDriverMap]
abiosdsk = "%1!u! МБ диск Micro Channel"
atdisk = "%1!u! МБ диск IDE/ESDI"
disk = "%1!u! МБ диск %2!u! ID %3!u! шина %4!u! на %5"
|
BAT-файл №2.
Код:
@ECHO OFF
FOR /F "tokens=1 delims=:" %%I IN ('FINDSTR /N /L [BootBusExtenders.Load]^<TXTSETUP1.SIF') DO (
SET /A VAR1=%%I
)
FOR /F "tokens=*" %%I IN ('FIND /N /V ""^<TXTSETUP1.SIF') DO (
FOR /F "tokens=1* delims=[]" %%J IN ("%%I") DO (
IF %%J LSS %VAR1% (
IF NOT %%I==[%%J]%%K (
SET /P VAR2="[%%K" 0>nul 1>>TXTSETUP2.SIF
ECHO.>>TXTSETUP2.SIF
) ELSE (
SET /P VAR2="%%K" 0>nul 1>>TXTSETUP2.SIF
ECHO.>>TXTSETUP2.SIF
)) ELSE (
IF NOT %%I==[%%J]%%K (
SET /P VAR2="[%%K" 0>nul 1>>temp.txt
ECHO.>>temp.txt
) ELSE (
SET /P VAR2="%%K" 0>nul 1>>temp.txt
ECHO.>>temp.txt
))))
MOVE temp.txt TXTSETUP1.SIF
ECHO All's ready! Press any key to exit.
PAUSE>nul
|
Время: 10:27.
© OSzone.net 2001-