Pregunta

Estoy escribiendo un script por lotes que deseo abrir un archivo y luego cambiar la segunda línea del mismo. Quiero encontrar la cadena '' gato '' y reemplazarlo con un valor que tengo SET, es decir,% var%. Solo quiero que esto suceda en la segunda línea (o las primeras 3 veces). ¿Cómo harías para hacer esto?

¿Fue útil?

Solución

Solo lo resuelvo yo mismo. Buscará var solo en la línea dos.

@echo OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET filename=%1
set LINENO=0    
for /F "delims=" %%l in (%filename%) do (
 SET /A LINENO=!LINENO!+1
 IF "!LINENO!"=="2" ( call echo %%l ) ELSE ( echo %%l )
)

Pero prefiero usar cscript (vbscript o incluso jscript).

Otros consejos

En primer lugar, usar un archivo por lotes para lograr esto es desordenado (en mi humilde opinión). Tendrá que usar una herramienta externa de todos modos para hacer el reemplazo de la cadena. En su lugar, usaría un lenguaje de script.

Si realmente desea utilizar un lote, esto lo ayudará a comenzar.

Esto sería feo si se tratara de secuencias de comandos por lotes nativas. Yo tampoco

  1. Haga esto en VBScript. Si realmente necesita esto en un archivo por lotes, puede llamar al archivo VBScript desde el script por lotes. Incluso puede pasar% var% como argumento al VBScript.

  2. Usa un script sed. Hay puertos de Windows de comandos de Unix como GnuWin32 , GNU Utilities for Win32 (las uso), o Cygwin .

Crearía un script que:

  1. escanear el archivo de entrada
  2. escribir en un segundo archivo de salida
  3. eliminar la entrada
  4. cambiar el nombre de la salida

En cuanto a los dos comandos para analizar, hice un Búsqueda de Google y se le ocurrió un buen punto de partida:

@echo off
setlocal enabledelayedexpansion

set file=c:\file.txt
set output=output.txt
set maxlines=5000

set count=0

for /F "tokens=* usebackq" %%G in ("%file%") do (
 if !count!==%maxlines% goto :eof

 set line=%%G
 set line=!line:*000000000000=--FOUND--!
 if "!line:~0,9!"=="--FOUND--" (
  echo %%G>>"%output%"
  set /a count+=1
 )
)

(Robado de Intarwebnet)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top