He hecho esto:
Supongamos que nuestro archivo se llama "file.txt", y tiene un contenido igual al que pusiste:
La salida que da mi script es:
El script es este:
Obviamente tienes que volcar la salida a un archivo de texto nuevo, luego si quieres renombras.
Edit, esto también funciona:
Lo edita en el mismo lugar.
Supongamos que nuestro archivo se llama "file.txt", y tiene un contenido igual al que pusiste:
Código (bash) [Seleccionar]
LST;1;
costados\koa9\koa9gx70;ko-//-a9-gx7-0 ; ;1;1;0;2278.;325.;18.;0;0;0;0;0;0;0;0;;;;
costados\koa9\koa9gx70;ko-//-a9-gx7-0 ;M;1;1;0;2278.;325.;18.;0;0;0;0;0;0;0;0;;;;
wa;baldas fondo 2, 3, 5 y 6;;0;0;1;1162.;280.;18.;0;0;;;;;;;;;;
plb;puerta com·n batiente ;;0;0;1;2275.;297.;20.;0;1;2;192;0;0;0;0;0;0;;
La salida que da mi script es:
Código [Seleccionar]
LST;1;
costados\koa9\koa9gx70;ko-//-a9-gx7-0 ; ;1;1;0;2278.;325.;18.;0;0;0;0;0;0;0;0;;;;
costados\koa9\koa9gx70;ko-//-a9-gx7-0 ;M;1;1;0;2278.;325.;18.;0;0;0;0;0;0;0;0;;;;
wa;baldas fondo 2, 3, 5 y 6;;0;0;1;1162.;280.;18.;0;0;;;;;;;;;;
plb;puerta com·n batiente ;;0;0;1;2274.;297.;20.;0;1;2;192;0;0;0;0;0;0;;
El script es este:
Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
rem Saber en que linea vamos a cambiar:
for /f "tokens=1 delims=:" %%# in ('type "file.txt" ^| findstr /i /n "puerta"') do (
set "n_line=%%#"
)
rem La linea
for /f "tokens=*" %%_ in ('type "file.txt" ^| findstr /i "puerta"') do (
set "linea=%%_"
)
set /a "count=0"
for /f "tokens=*" %%_ in (file.txt) do (
set /a count+=1
rem Mostrar normalmente:
if !count! lss !n_line! (
echo %%_
)
rem Sino, procesar:
if !count! equ !n_line! (
for /f "delims=; tokens=1-6*" %%a in ('echo !linea!') do (
set "numero=%%f"
set "numero=!numero:~0, -1!"
set /a numero-=1
echo %%a;%%b;;%%c;%%d;%%e;!numero!.;%%g
)
)
)
Obviamente tienes que volcar la salida a un archivo de texto nuevo, luego si quieres renombras.
Edit, esto también funciona:
Código (bash) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
for /f "delims=: tokens=1-2*" %%a in ('type "file.txt" ^| findstr /i /n "puerta"') do (
set "n_line=%%a"
)
for /f "tokens=*" %%_ in ('type "file.txt" ^| findstr /i "puerta"') do (
set "linea=%%_"
)
for /f "delims=; tokens=1-6*" %%a in ('echo !linea!') do (
set "numero=%%f"
set "numero=!numero:~0, -1!"
set /a numero-=1
call:edit %%a "%%b" %%c %%d %%e !numero! "%%g"
goto:eof
)
:edit
::
(
echo %n_line%
echo %1;%~2;;%3;%4;%5;%6.;%~7 %~8
echo w
echo e
) | edlin /b file.txt > nul 2>&1
goto:eof
Lo edita en el mismo lugar.