¿Se Puede Editar cierta Linea de un archivo.Ini Con Bat y que en la ventana cmd Puedas escribir lo que quieres poner?

Quiero Saber Si es Posible Lo Anterior. Ejemplo necesito editar donde dice TCTITLE=TCPLUS por TCTITLE= ¿? Y que lo que quiera poner hay lo pueda escribir en la Ventana cmd(El = de TCTITLE Puede Cambiar puede ser TCPLUS o Puede estar hay cualquier otra cosa nesecito que el bat localice la linea TCTITLE= y Remplace el resultado pero que me deje escribirlo en la ventana de CMD)

[Configuration]
hola=123
TCTITLE=TCPLUS
Viewertype=0
FirstTimeUnpack=0
FirstTimeZIP=0
ShowCentury=0
Aligned extension=0

1 Respuesta

Respuesta
1

Es solo una variante del BAT que hemos estado depurando en tu otra consulta, Buenas quería saber como editar un archivo.ini con bat necesito editar cierta línea de un ini extenso que contiene espacios . Esta es mi propuesta:

@echo off
Setlocal EnableDelayedExpansion
set archivo=wincmd.ini
set param=TCTITLE
set long=8
set /p valor=Introduce el valor a asignar al parametro %param%:
del /q kkk.ini>nul 2>&1
echo.> temp.txt
for /f "skip=2 tokens=1*" %%x in ('fc /LB2000 /n temp.txt "%archivo%" ^| findstr -v "*****"') do (
if "%%y" == "" echo.>> kkk.ini
if not "%%y" == "" (
   set linea=%%y
   if "!linea:~0,%long%!" == "%param%=" (echo %param%=%valor%>>kkk.ini
      ) else echo %%y>>kkk.ini
   )
)
del /q temp.txt
move /y kkk.ini %archivo%

¡Gracias! Perfecto Amigo eres Grande, bien como dices se podía seguir en el hilo anterior Muchas Gracias. - Por ultimo en cuanto a esto de edición de TXT o Ini con Bat Quiero hacer Otra Pregunta ¿Si quieres la hago aparte?

*Es Editar una cadena completa de un ini con bat (Desde) otro ini o TXT Creo que se llama así no se bien el como llamarle (Cadena) pero a lo que me refiero es a toda la sección de [Configuration] que esta en la pregunta arriba o sea todo esto:

[Configuration]
hola=123
TCTITLE=TCPLUS
Viewertype=0
FirstTimeUnpack=0
FirstTimeZIP=0
ShowCentury=0
Aligned extension=0

Supongamos eso es lo que esta en el ini que quiero editar y en otro ini o txt da igual tengo esto:

[Configuration]
hola=123
StartupScreen=0
CopyOverwriteDefault=6
UseIniInProgramDir=7
SearchInFiles=*.DOCX *.XLSX
DrivesShowUpcase=1
firstmnu=1349
FirstTime=0
UseRightButton=1
Savepath=1
Savepanels=1
MarkDirectories=1

O sea son líneas distintas seria ordenar al bat que busque la sección [Configuration] y remplace su contenido con el contenido de otro Ini o txt

Si quieres lo hago en una Pregunta aparte pues la inicial ya esta respondida Gracias

El otro TXT o ini solamente va atener el contenido de [Configuration] para reemplazar el 1ro.

Lo pensé lo de remplazar con otro txt o ini para no hacer el bat tan extenso y tener que poner línea por línea pero igual me serviría.

Antes de nada te sugiero que utilices la herramienta de la página "Insertar código fuente" para incluir las partes de código. Se lanza con el icono "<>" de la barra de herramientas de la propia página (tercero desde la derecha).

A ver si te he entendido bien. Tienes un archivo INI con un "apartado" de configuración, que se caracteriza porque es lo que sigue a una línea con el literal "[Configuration]", y otro archivo TXT (o cualquier otra extensión) que contiene las líneas con las que quieres sustituir el apartado de configuración del INI. En principio lo que parece que podría funcionar es ir leyendo el INI línea a línea y copiar las líneas en el archivo de salida hasta que aparezca una línea con el literal "[Configuration]". En ese momento copias al archivo de salida todas las líneas del TXT. Luego sigues leyendo las líneas del INI, pero sin copiarlas al archivo de salida, hasta que lees del INI otro literal que signifique que se ha terminado el "apartado" de configuración y a partir de ahí sigues copiando al archivo de salida las siguientes líneas del INI. Habría que saber como detectar el fin de ese "apartado". Imagino que podría ser porque se lea una línea que empiece por "[", lo que nos obligaría a controlar el primer carácter de cada línea posterior a la que contiene el literal "[Configuration]"

En este caso considero que puede ser interesante abrir una nueva pregunta con un asunto que sea algo como "Reemplazar un apartado de un archivo INI por el contenido de otro archivo". De esta manera si alguien busca en la red algo similar podría encontrarlo en esta página. Mientras tanto voy a ir pensando en el BAT que haga eso.

Ok ¡Gracias! Are la pregunta más explicada aparte

¡Adelante! Creo que ya tengo el BAT preparado

Como decía en el último hilo que has abierto sobre estos temas voy a incluir aquí una versión que no cumple el requisito de respetar las líneas en blanco pero a cambio no divide las líneas de más de 128 caracteres. Sería esta:

@echo off
Setlocal EnableDelayedExpansion
set archivo=wincmd.ini
set param=TCTITLE
set long=8
set /p valor=Introduce el valor a asignar al parametro %param%:
del /q kkk.ini>nul 2>&1
for /f "usebackq tokens=*" %%y in ("%archivo%") do (
   set linea=%%y
   if "!linea:~0,%long%!" == "%param%=" (echo %param%=%valor%>>kkk.ini
      ) else echo %%y>>kkk.ini
   )
)
move /y kkk.ini %archivo%

Ya Lo Probé Funciona Perfecto Todo Lo que Yo quería Muchiciamas Gracias No tengo Como Agradecerte por Tanta amabilidad y Paciencia Muchas Gracias

Hola Colega disculpa que te vuelva a molestar después de tanto tiempo con esto, pero me hace falta tu ayuda nuevamente si es posible y es lo Siguiente. Partiendo de tu última respuesta aquí que Funciona Perfecto.

Me hace falta en esta Ocasión que Antes de Lo que sea Que uno Ponga en la ventana del Bat, el bat ponga esto en el .ini a editar "" doble comillas doble y al final esto " "%1"" de manera que ejemplo yo pongo en la Ventana del 1234 y en el .ini me quede así ""1234" "%1"" . Espero me ayas entendido. Saludos.

Yo creo que bastaría con sustituir la línea:

   if "!linea:~0,%long%!" == "%param%=" (echo %param%=%valor%>>kkk.ini

por esta otra:

   if "!linea:~0,%long%!" == "%param%=" (echo %param%=""%valor%" "%%1"">>kkk.ini

Ya me dirás.

Muchas ¡Gracias!. Perfento. 

Mira tengo un mínimo problema El bat lo estoy usando arrastrando a la ventana ejecutables de programas porque lo que quiero poner en él .ini son rutas de programas funciona bien con programas que están ubicados en C:\Program Files\ pero el problema esta cuando quiero poner programas que están en C:\Program Files (x86)\ por alguna razón con (x86) no funciona se abre y se cierra el bat. Pero me he dado cuenta que está relacionado con las Comillas porque Cuando arrastro algun ejecutable de (x86) si les quito las Comillas que pone el bat automático funciona, para mí no era ningún problema que el bat pusiera comillas automáticas porque eso lo ase batch para leer rutas con espacios y lo que ice fue quitar una comilla adelante y una atrás en la última línea que me mandaste que editara para que en el .ini el resultado quedara como yo quería 

if "!linea:~0,%long%!" == "%param%=" (echo %param%="%valor% "%%1"">>kkk.ini

entonces el bat lo tengo con la línea así y me funciona bien menos con la ruta C:\Program Files (x86) me di cuanta también que si dejo la versión inicial del bat, sin poner " adelante y esto atras "%%1"" también funciona con la ruta (x86) pero así no me sirve me ase falta que quede con esos caracteres adelante y atrás, pero por hay esta el problema por las comillas no sé si va a tener solucion.Saludos.

También funciona bien dejando todo lo de las comillas ,pero quitando los paréntesis de (x86) lo cual no me sirve pero te lo comento para que tengas una ideas de los conflictos.

También funciona bien dejando todo lo de las comillas ,pero quitando los paréntesis de (x86) lo cual no me sirve pero te lo comento para que tengas una ideas de los conflictos.

Es un poco extraño lo que cuentas de los paréntesis. Dices que aplicas el BAT arrastrando cada INI sobre él. Eso implica que usas parámetros de invocación, concretamente %1 (si solo es uno como parece). ¿Me puedes pasar por aquí el bat completo para ver si me hago una idea?

No Mira Yo No aplico el bat Arrastrando el .ini el bat Yo lo tengo en la misma carpeta que el archivo.ini a editar, yo lo que hago es ejecutar el Bat y arrastrar a la ventana un EJECUTABLE DE CUALQUIER PROGRAMA para poner la ruta con el Nombre del Ejecutable.exe que es lo que quiero de resultado en el .ini mira el bat lo Tengo ASÍ

@echo off
color 4f
Title Programas Predeterminados
cls
Setlocal EnableDelayedExpansion
set archivo=wincmd.ini
set param=Filter1_open
set long=13
set /p valor=Introduce You Titulo %param%:
echo Por Favor Espere.
del /q kkk.ini>nul 2>&1
for /f "usebackq tokens=*" %%y in ("%archivo%") do (
   set linea=%%y
   if "!linea:~0,%long%!" == "%param%=" (echo %param%="%valor% "%%1"">>kkk.ini
      ) else echo %%y>>kkk.ini
   )
)
move /y kkk.ini %archivo%
exit

y Me Funciona Bien Como dije pero el Problema esta cuando quiero usar un programa que este en la ruta C:\Program Files (x86)\ mira el ini es este tiene muchas mas cosas pero te voy a poner solo la seccion donde aplica cambios el bat para que pruebe usted mismo, ejecuta el bat y arrastra asia su ventana un ejecutable que este en la ruta C:\Program Files\ y funcionara Perfecto pero si arrastras uno que este en C:\Program Files (x86)\ no funcionara

[Associations]
Filter1=>Documentos
Filter1_open=""%COMMANDER_PATH%\Soft\Principal\SoftMakerOffice\TextMaker.exe" "%1""
Filter1.icon=DcSystem.dll,88
Filter1_Abrir con Word=""winword" "%1""
Filter2=>Documentos User
Filter2.icon=DcSystem.dll,88
Filter3=>Hojas de Cálculo
Filter3_open=""%COMMANDER_PATH%\Soft\Principal\SoftMakerOffice\PlanMaker.exe" "%1""
Filter3.icon=DcSystem.dll,89
Filter3_Abrir con Excel=""excel" "%1""
Filter4=>Hojas de Cálculo User
Filter4.icon=DcSystem.dll,89
Filter5=>Presentaciones
Filter5_open=""%COMMANDER_PATH%\Soft\Principal\SoftMakerOffice\Presentations.exe" "%1""
Filter5.icon=DcSystem.dll,90
Filter5_Abrir con PowerPoint=""powerpnt" "%1""
Filter6=>Presentaciones User
Filter6.icon=DcSystem.dll,90
Filter7=>Libros Electrónicos
Filter7_open=""%COMMANDER_PATH%\Plugins\wlx\slister\SumatraPDF.exe" "%1""
Filter7.icon=FilesIconLib.dll,28
Filter8=>Adobe Flash
Filter8_open=""%COMMANDER_PATH%\Soft\Juegos\FlashPlayer.exe" "%1""
Filter8.icon=%COMMANDER_PATH%\Soft\Juegos\FlashPlayer.exe
Filter9=>Comprimidos
Filter9_open=""%COMMANDER_PATH%\Compresores\rar\winrar.exe" "%1""
Filter9.icon=%COMMANDER_PATH%\Compresores\rar\winrar.exe
Filter10=>Audio
Filter10_open=""%COMMANDER_PATH%\Soft\Principal\AIMP\AIMP.exe" "%1""
Filter10.icon=DcSystem.dll,72
Filter10_Editar con Audacity=""%COMMANDER_PATH%\Tools\Audacity\audacity.exe" "%1""
Filter11=>Audio User
Filter11.icon=DcSystem.dll,72
Filter12=>Listas de reproducción
Filter12_open=""%COMMANDER_PATH%\Soft\Principal\AIMP\AIMP.exe" "%1""
Filter12.icon=DcSystem.dll,71
Filter13=>Videos
Filter13_open=""%COMMANDER_PATH%\Soft\Principal\PotPlayer\PP.exe" "%1""
Filter13.icon=DcSystem.dll,58
Filter13_Editar con Movavi Video Editor=""%COMMANDER_PATH%\Soft\Principal\MovaviVideoEditor\VideoEditorPlus.exe" "%1""
Filter14=>Videos User
Filter14.icon=DcSystem.dll,58
Filter15=>Subtítulos
Filter15_open=""%COMMANDER_PATH%\Soft\Principal\NotePad++\notepad++.exe" "%1""
Filter15.icon=%COMMANDER_PATH%\Soft\Principal\NotePad++\notepad++.exe
Filter16=>Imágenes básicas
Filter16_open=""%COMMANDER_PATH%\Soft\Principal\Picasa3\PicasaPhotoViewer.exe" "%1""
Filter16.icon=DcSystem.dll,78
Filter16_Abrir con Imagine=""%COMMANDER_PATH%\Plugins\wlx\Imagine\Imagine.exe" "%1""
Filter16_Editar en Photoshop=""%COMMANDER_PATH%\Soft\Principal\Photoshop7\Photoshop.exe" "%1""
Filter17=>Imágenes básicas User
Filter17.icon=DcSystem.dll,78
Filter18=>Imágenes otras
Filter18_open=""%COMMANDER_PATH%\Soft\Principal\Picasa3\PicasaPhotoViewer.exe" "%1""
Filter18.icon=DcSystem.dll,78
Filter18_Abrir con Imagine=""%COMMANDER_PATH%\Plugins\wlx\Imagine\Imagine.exe" "%1""
Filter18_Editar en Photoshop=""%COMMANDER_PATH%\Soft\Principal\Photoshop7\Photoshop.exe" "%1""
Filter19=>Imágenes otras User
Filter19.icon=DcSystem.dll,78
Filter20=>Karaoke
Filter20_open=""%COMMANDER_PATH%\Soft\Principal\KaraokePlayer\vmidi.exe" "%1""
Filter20.icon=%COMMANDER_PATH%\Soft\Principal\KaraokePlayer\vmidi.exe
Filter21=>Documentos PDF
Filter21_open=""%COMMANDER_PATH%\Plugins\wlx\slister\SumatraPDF.exe" "%1""
Filter21.icon=DcSystem.dll,85
Filter22=>Correos
Filter22_open=""%COMMANDER_PATH%\Soft\Principal\Mozilla Thunderbird\thunderbird.exe" "%1""
Filter22.icon=FilesIconLib.dll,22
Filter23=>Texto Plano
Filter23_open=""%COMMANDER_PATH%\Soft\Principal\Notepad++\Notepad++.exe" "%1""
Filter23.icon=%COMMANDER_PATH%\Soft\Principal\NotePad++\notepad++.exe
Filter24=>Texto Plano - Programación (Grupo1)
Filter24_open=""%COMMANDER_PATH%\Soft\Principal\Notepad++\Notepad++.exe" "%1""
Filter24.icon=%COMMANDER_PATH%\Soft\Principal\NotePad++\notepad++.exe
Filter25=>Texto Plano - Programación (Grupo2)
Filter25_open=""%COMMANDER_PATH%\Soft\Principal\Notepad++\Notepad++.exe" "%1""
Filter25.icon=%COMMANDER_PATH%\Soft\Principal\NotePad++\notepad++.exe
Filter26=>Encriptados de DCU
Filter26_open=""%COMMANDER_PATH%\Soft\Principal\DCU\DCU.exe" "%1""
Filter26.icon=FilesIconLib.dll,24
Filter27=>Discos encriptados de TrueCrypt
Filter27_open=""%COMMANDER_PATH%\Soft\Principal\TrueCrypt\TrueCrypt.exe" "%1""
Filter27.icon=FilesIconLib.dll,26
Filter28=>Contraseñas de KeePass
Filter28_open=""%COMMANDER_PATH%\Soft\Principal\KeePass\KeePass.exe" "%1""
Filter28.icon=FilesIconLib.dll,25
Filter29=>Imágenes de CD/DVD
Filter29_open=""%COMMANDER_PATH%\Soft\Principal\PowerISO\PowerISO.exe" "%1""
Filter29.icon=%COMMANDER_PATH%\Soft\Principal\PowerISO\PowerISO.exe
Filter30=>Lista de archivos de Everything
Filter30_open=""%COMMANDER_PATH%\Soft\Principal\Everything\Everything.exe" "%1""
Filter30.icon=FilesIconLib.dll,29
Filter31=>Proyecto de MovaviVideoEditor
Filter31_open=""%COMMANDER_PATH%\Soft\Principal\MovaviVideoEditor\VideoEditorPlus.exe" "%1""
Filter31.icon=%COMMANDER_PATH%\Soft\Principal\MovaviVideoEditor\VideoEditorPlus.exe

lo puse a que editara la 2da linea

Sigo sin entender del todo. Intuyo que arrastrar hacia la ventana de CMD en la que se está ejecutando el bat el ejecutable que se quiere asignar sirve para rellenar el campo que se solicita "por consola", en este caso la respuesta al mensaje:

Introduce You Titulo Filter1_open:

Por lo que he visto el problema está relacionado con el paréntesis de cierre, probablemente porque se considera que cierra el paréntesis abierto antes del ECHO. Prueba con esta versión del bat:

@echo off
Color 4f
Title Programas Predeterminados
Cls
Setlocal EnableDelayedExpansion
set archivo=wincmd.ini
set param=Filter1_open
set long=13
set /p valor=Introduce You Titulo %param%:
set valor=%valor:)=^^)%
echo Por Favor Espere.
del /q kkk.ini>nul 2>&1
for /f "usebackq tokens=*" %%y in ("%archivo%") do (
   set linea=%%y
   if "!linea:~0,%long%!" == "%param%=" (echo %param%=""%valor%" "%%1"">>kkk.ini
      ) else echo %%y>>kkk.ini
   )
)
move /y kkk.ini %archivo%
exit

Lo que se hace es sustituir en la variable VALOR la aparición de los ")" por "^)" . Aunque esté duplicado el "^" en realidad solo se pasa uno a la variable. A esto se le llama "escapar" el carácter. Ya me contarás si funciona.

Bueno tuve que quitarle esto ^^ a esta línea

set valor=%valor:)=)%

(y Funciona bien), pero como C:\Program Files (x86)\ es una Ruta Con Espacios cuando tu arrastras el ejecutable le agrega(")  "adelante y atras automaticamente" entonces el resultado me queda """C:\Program Files (x86)\ejecutable.exe"" "%1"" con una (") de mas, adelante y atras, y como me tiene que quedar es asi ""C:\Program Files (x86)\ejecutable.exe" "%1"" entonces para que el resultado en el .ini me quede como quiero tengo que quitarle a esta Linea 2 " una Delante y otra atras de %valor% y dejarla ASI

if "!linea:~0,%long%!" == "%param%=" (echo %param%="%valor% "%%1"">>kkk.ini

y Hay entonses es que deja de Funcionar

¿Por qué dices que tuviste que quitar ^^ a esa línea? Sin eso no hace nada.

Por lo que veo en las líneas del INI:

Filter1_open=""%COMMANDER_PATH%\Soft\Principal\SoftMakerOffice\TextMaker.exe" "%1""

Hay dobles comillas dobles al empezar, una al terminar el EXE, un espacio, unas comillas dobles, el %1 y dos dobles comillas. Supongo por tanto que la línea cambiada tendría que ser:

""C:\Program Files (x86)\ejecutable.exe" "%1""

¿No es así?

Ponme un pantallazo de la ejecución del BAT, tal como te lo puse, es decir con las ^^

Si tiene que quedar así como pusiste,, el problema de esto ^^ es que lo pone en el .ini , queda así (x86^^) y entonces lo de las comillas es que tal como pusiste el bat no queda así queda con 3 comillas adelante y 2 atrás seguidas o sea queda asi

"""C:\Program Files (x86)\ejecutable.exe"" "%1""

Fíjate en la diferencia con la pusiste más arriba.Eso se debe a que cuando arrastras un ejecutable en la ventana de la consola se le agrega una comilla adelante y otra atrás,por la ruta tener espacios queda así en la ventana de la consola "C:\Program Files (x86)\ejecutable.exe" estás comillas que las pone la consola automáticamente también se le agregan al archivo.ini y por eso queda con 3 comillas adelante y 2 seguidas atras de la forma que acabo de poner.

Creo que ya he entendido la forma de trabajar que utilizas. En cuanto a las comillas no estaba teniendo en cuenta que con esa forma de trabajae la variable VALOR ya se "carga" entrecomillada. Por tanto no debe ponerse entre comillas en el ECHO. Y también he logrado entender el problema del ^^) (también tiene que ver con el hecho de que la variable VALOR lleve las comillas incorporadas). Ahora ya debería ir bien en todos los casos:

@echo off
Color 4f
Title Programas Predeterminados
Cls
Setlocal EnableDelayedExpansion
set archivo=wincmd.ini
set param=Filter1_open
set long=13
set /p valor=Introduce You Titulo %param%:
set valor=%valor:)=^)%
echo Por Favor Espere.
del /q kkk.ini>nul 2>&1
for /f "usebackq tokens=*" %%y in ("%archivo%") do (
   set linea=%%y
   if "!linea:~0,%long%!" == "%param%=" (echo %param%="%valor% "%%1"">>kkk.ini
      ) else echo %%y>>kkk.ini
   )
)
move /y kkk.ini %archivo%
exit

Solo he cambiado el ^^) por ^) y he quitado las comillas del %valor%

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas