[BATCH] Novato ayuda con programa .bat[Solucionado]

Iniciado por Iridiel, 13 Enero 2011, 17:08 PM

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

Iridiel

Antes que nada presentarme a todos ustedes. No tengo muchas nociones de programacion y usando el google tratando de encontrar algun sitio donde explicaran como resolver un problema que tengo he dado con su magnifico foro. Espero que puedan echarme una mano. Mi problema es el siguiente.

Tengo necesidad de crear un archivo .bat o similar que sea capaz de coger la mac de un equipo, buscarla en un archivo .txt y devolver por pantalla una cadena de texto que se encuentra en dicho archivo .txt separado por espacio. Es decir:

En el archivo txt habra una lista de macs y nombres tipo "40-26-FF-A3-87-42 pepe" yo necesito que saque la mac del ordenador, la muestre en pantalla y a continuacion me muestre a que nombre va asociada dicha mac.

Si pudieran echarme un cable les estaria muy agradecidos. Ya se que esto es pedir que me den el trabajo hecho, pero si por lo menos pudieran orientarme se lo agradeceria. Mis conocimientos son escasos y necesitaria poder resolver esto.

Un saludo
Iridiel

xassiz~

Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion

call:getMac
for /f "tokens=*" %%%% in (file.txt) do (
set "line=%%~%%"
if "!line:~0,17!" == "!mac!" (
echo !line:~18!
)
)
>nul pause
exit

:getMac ()
for /f "tokens=*" %%x in ('wmic nicconfig get MACAddress') do (
set "mac=%%x"
if "!mac:~2,1!" == ":" (
set "mac=!mac:~0,17!"
goto:eof
)
)
set "mac=[unknown]"
goto:eof

Acabo de hacerlo y testearlo en Windows 7.

Iridiel

#2
EDIT: Rectificando jejeje.

Muchas gracias por tu ayuda. Esto es justo lo que buscaba. Ahora que ya solo me queda asignar ese nombre a una variable y trabajar con ella. Muchisimas gracias, en serio  ;-)

leogtz

Podrías poner algunas MAC's de ejemplo, como si fuera el archivo file.txt, para ver la estructura del mismo.
Código (perl) [Seleccionar]

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

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

xassiz~

Cita de: Iridiel en 13 Enero 2011, 19:07 PM
EDIT: Rectificando jejeje.

Muchas gracias por tu ayuda. Esto es justo lo que buscaba. Ahora que ya obtengo en una variable el nombre correspondiente a la mac ya puedo hacer lo que quiera con el. Muchisimas gracias, en serio  ;-)
De nada, espero que entiendas el código y no solo lo utilices :rolleyes:


Iridiel

#5
Cita de: Leo Gutiérrez. en 13 Enero 2011, 19:21 PM
Podrías poner algunas MAC's de ejemplo, como si fuera el archivo file.txt, para ver la estructura del mismo.

Pues el archivo entiendo que debe ser algo asi:

0F:44:GG:1C:E7:02 PEPE
A0:27:GD:CC:E7:04 MANOLO
BB:38:1D:13:E7:05 ANTONIO
50:24:AB:14:E7:11 JUAN
12:24:VV:1F:E7:05 CARLOS

Cita de: pablomi en 13 Enero 2011, 19:25 PM
De nada, espero que entiendas el código y no solo lo utilices :rolleyes:



Claro, aun tengo que añadirle alguna funcionalidad. Y si logro entender como lo has hecho, pues seguramente me ayude con futuras dudas. Ademas, mi idea es poner el nombre correspondiente a la mac en una variable para poder añadir dicho nombre al reg de windows. Asi que no se queda solo en esto.

Muchas gracias otra vez por la ayuda.

xassiz~

Cita de: Iridiel en 13 Enero 2011, 19:31 PM
Ademas, mi idea es poner el nombre correspondiente a la mac en una variable para poder añadir dicho nombre al reg de windows. Asi que no se queda solo en esto.
Solo tienes que cambiar el echo por un set.

Iridiel

#7
Si claro. Como ejemplo tonto, para ver si lo hacia bien puse:


@echo off
setlocal enabledelayedexpansion

call:getMac
for /f "tokens=*" %%%% in (claves.txt) do (
set "line=%%~%%"
if "!line:~0,17!" == "!mac!" (
set "nombre=!line:~18!"
echo !nombre!
pause
exit
)
)


>nul pause
exit

:getMac ()
for /f "tokens=*" %%x in ('wmic nicconfig get MACAddress') do (
set "mac=%%x"
if "!mac:~2,1!" == ":" (
set "mac=!mac:~0,17!"
goto:eof
)
)
set "mac=[unknown]"
goto:eof


Y me muestra el valor de la variable "nombre" perfectamente. Ahora mirando por aqui, usando la logica y la ayuda del comando reg seguro que saco el resto :P