lecquio escribió:Los ficheros por lotes mas que con if - else se hacían con if y gotos, prueba así:
@echo on &setlocal
set "ruta=%windir%\system32\drivers\etc"
set "search=servihuseapa 1528/tcp #informix"
set "replace=servihuseapa 1528/tcp #informix Modificado"
set "textfile=%ruta%\services"
set "newfile=%ruta%\services_new"
Findstr servihuseapa "%textfile%" >> "%ruta%\tempfile"
IF %errorlevel% == 1 GOTO ERROR
IF %errorlevel% == 0 GOTO OK
:OK
(for /f "delims=" %%i in ('findstr /i "^" "%textfile%"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
))>"%newfile%"
type "%newfile%"
goto fin
:ERROR
echo %replace% >> "%ruta%\services"
goto fin
del "%ruta%\tempfile"
Muchas gracias
@lecquio! el lunes lo modificaré con tus propuestas y comento!
@jb_______ gracias por tu comentario, de todos modos iré con la propuesta de
@lecquio en primer lugar ya que tiene muy buena pinta, aunque, quizás tenga que combinar ambas...
@juananBow, como dices, en tu primer párrafo, es así, si no existe el texto en el fichero "services" original quiero añadir la cadena de texto en el fichero existente (lo que ya sería la hostia es ordenarlo por puertos... pero creo que con un bat será imposible o muy complicado...). Es decir, necesito añadir ese servicio, puerto y protocolo a la lista de servicios detallados en el archivo "services" de Windows en el caso de que no exista, en cambio si existe reemplazarlo por los nuevos básicamente esa es la función del bat. Cuando eso funcione, meteré código para hacer lo mismo con el archivo "hosts" y los ".ini" de la aplicación...
Se trata de una aplicación que utiliza una BBDD Informix y se han migrado la versión de la app y, asimismo, se ha creado una nueva BBDD y hay que hacer las correcciones de conexión en esos tres ficheros, además, de modificar algunas claves de registro... Para evitar que los técnicos de micro tengan que hacer todo manualmente, mi intención es hacerles ese .bat para facilitarles la tarea de migración en los 50 PCs que comenté en el post original.
En cuanto a tu segunda observación, tienes razón con eso valdría, eso quedó así después de hacer varias pruebas intentando meter el valor que me daba
findstr en una variable para utilizarla en el IF pero... parece que en los bat eso no funciona así... por lo que, decidí utilizar
ERRORLEVEL para ello pero dejé la función de crear el archivo... en fin, que como dices, dejé basurilla y aprovechando tu comentario la limpiaré... gracias a ti también.
El lunes os digo si con vuestras propuestas funciona como debe!
Gracias a todos y saludos.