Acciones sobre archivos de texto. [Batch]

Iniciado por leogtz, 24 Enero 2009, 00:30 AM

0 Miembros y 2 Visitantes están viendo este tema.

vrer

y como seria para sacar el nombre de la conxion de red en algunos es Conexión de área local 2 otros Conexión de área local y otros lo configuran con un nombre personalizado o sistema operativo esta en otro idioma e intentado con for pero al ponerlo en variable no agarra los acentos y da error por nombre e tratado de sacarlo de netsh interface ip show config pero nose puede poner delimitadores "
bueno asi
netsh interface ip show config> nombre_Red.txt

quiero sakar lo q esta en comillas ya q siempre el nombre esta ahi entre las 2 comillas
en cambio en ipconfig> red.txt no se como podria funcionar ya q todo cambiaria x idioma del sistema (como el Adaptador Ethernet); tbm cambiaria el numero de letras del nombre de red si es Conexión de área local 2 o 1 o si lo cmabiaron de nombre

por eso opte por el netsh interface ip show config para el nombre de la conexion de red pero no se como sakar lo q esta en comillas del archivo de texto o de variable
Configuraci¢n para la interfaz "Conexi¢n de  rea local 2"

leogtz

Teniendo como base lo siguiente:

C:\Users\leo>netsh interface show interface

Estado admin.    Estado          Tipo             Nombre interfaz
-------------------------------------------------------------------------
Habilitado     Desconectado   Dedicado         Conexión de área local
Habilitado     Conectado      Dedicado         Conexión de red inalámbrica


C:\Users\leo>netsh interface ip show config

Configuración para la interfaz "Conexión de área local"
    DHCP habilitado:                         Sí
    Métrica de interfaz:                      5
    Servidores DNS configurados a través de DHCP: ninguno
    Registrar con el sufijo:           Solo el principal
    Servidores WINS configurados a través de DHCP: ninguno

Configuración para la interfaz "Conexión de red inalámbrica"
    DHCP habilitado:                         Sí
    Dirección IP:                           192.168.1.64
    Prefijo de subred:                        192.168.1.0/24 (máscara 255.255.25
5.0)
    Puerta de enlace predeterminada:                   192.168.1.254
    Métrica de puerta de enlace:                       0
    Métrica de interfaz:                      25
    Servidores DNS configurados a través de DHCP:  192.168.1.254
    Registrar con el sufijo:           Solo el principal
    Servidores WINS configurados a través de DHCP: ninguno

Configuración para la interfaz "Loopback Pseudo-Interface 1"
    DHCP habilitado:                         No
    Dirección IP:                           127.0.0.1
    Prefijo de subred:                        127.0.0.0/8 (máscara 255.0.0.0)
    Métrica de interfaz:                      50
    Servidores DNS configurados estáticamente:   ninguno
    Registrar con el sufijo:           Solo el principal
    Servidores WINS configurados estáticamente:   ninguno


C:\Users\leo>


Se podría implementar esto:
Código (dos) [Seleccionar]
@echo off
for /f "tokens=3* skip=2" %%a in ('netsh interface show interface ^| findstr /R /v "^-"') do (
echo %%b
)
for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
echo %%b
)
pause


Por cierto, aquí se acostumbra pedir las cosas por favor, tener cortesía, no la estás teniendo, solo estás pidiendo, y otra cosa, hay que cuidar más la ortografía, estás dejando totalmente de lado los signos de puntuación.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

vrer

muchas gracias leo no es que este exigiendo y que no sepa ortografia basica es que asi suelo escribir por internet pero voy a cambiar unas consultas mas sino es problema en el codigo usas el config pero si el sistema operativo esta en otro idioma y no encuentra el config, es decir el solo falta el nombre de la red para a traves del comando netsh pueda cambiar las ips dns y sin el nombre exacto me da error para eso necesitaba el nombre y si se pudiera hacer el proceso silencioso de modo que no salga nada en la pantalla del batch y guardarlo en una variable. Muchas gracias ante todo

leogtz

En el código, sólo habría que setearlas dentro del ciclo for:

Código (dos) [Seleccionar]
@echo off
for /f "tokens=3* skip=2" %%a in ('netsh interface show interface ^| findstr /R /v "^-"') do (
set conn=%%b
)
echo Connection : %conn%
for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
set "conn_2=%%b"
)
echo Connection : %conn_2%
pause


Prueba cual de esos dos ciclos te funciona, y si ninguno lo hace pega las salidas del código, del batch. También sería bueno que pusieras las salidas de los comandos, para ver cómo procesarlos y obterner lo que quieres.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

vrer

muchas gracias leo ahora pruebo los codigos ::)

vrer

#175
Una consulta mas por favor quisiera saber como puedo poner las lineas de la variable en varias variables mira cuando hago esto

for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
set "conn_2=%%b"
)
echo Connection : %conn_2%


me sale esto

Connection : "Loopback Pseudo-Interface 1"

pero tengo varias conexion de red mira cuando pongo para ver todas las redes

for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
echo %%b"
)

me sale esto:
"Conexión de red inalámbrica"
"Conexión de área local"
"Conexión de red Bluetooth"
"Loopback Pseudo-Interface 1"

Con ponerlo en una sola variable esta tomando solo la ultima linea como podria hacer para que cada linea de las posibles conexiones de red sea una variable asi pueda escoger que linea-variable usar muchas gracias de antemano

leogtz

Lo que se hace normalmente, es que se colocan las variables independientes en un array:

setlocal enabledelayedexpansion
rem Array de conexiones:
set /a contador=0
for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
set "conexion[!contador!]=%%b"
set /a contador+=1
)
set /a contador-=1
rem Ahora consultamos las conexiones :
rem de 0 a !contador!
for /l %%_ in (0,1,!contador!) do (
echo Conexion : [!conexion[%%_]!
)
pause


Y así luego puedes consultarlo de esta manera:

Citarecho !conexion[0]!
echo !conexion[%variable%]!
...

El código no está probado, tu dirás si funciona.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

vrer

funciona perfectamente gracias nuevamente leo  ;-)

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

DameBanda

Hola leo
Una pregunta, en batch, como se haría para volcar todas las lineas de un archivo a una variable??

Supongo que es una pregunta de noob absoluto pero ese problema en concreto me saca de quicio   :)

Salu2
"Amarillo, pensó" Douglas Adams




[img]http:/