Dar Nombre a La Pc con la mac address

Iniciado por Slikp, 8 Diciembre 2013, 20:47 PM

0 Miembros y 1 Visitante están viendo este tema.

Slikp

- Buenas Tardes, antes que nada debo decirles que soy menos que un novato en esto, tengo solo 2 dias explorando lo que es Bat- Batch y la verdad me e interesado en el por la facilidad que e visto en el para automatizar cierto procesos.

- Sin mas rodeos acudo a uds para pedirles ayuda para realizar un pequeño script que tengo en mente, lo que quiero hacer es lo siguiente, quiero darle un nombre o renombrar si ya posee un nombre la PC sin embargo quiero dale un determinado nombre seguido de los ultimos 6 digitos de la mac de dicha pc.

- Intente recopilar la mayor información que pude en este foro para ver si lo podia hacer pero que va no doy con lo que busco.

- Les comento lo que intente hacer y donde tengo problemas. En primer lugar pense en hacer un Getmac para obtener la mac address de la pc luego pegarlo en un bloc de notas, copiar solo los 6 ultimos digitos meter esos 6 digitos en una variable y renombrar la pc dando un X nombre mas la variable y buscando encontre varias cosas pero aun asi no pude.

- Con esto obtuve la Mac address.
      
       @echo off
          getmac
       pause
   

-  Pero no encontre manera de copiar esa mac y pegarlo en un bloc de notas Intente con esto pero no resulto.
 
@echo off
    set mac="getmac"
    %mac%
echo %mac% >"%USERPROFILE%\desktop\resultado.txt"
pause

- Me hace el bloc de notas pero no pega nada y a veces pega solo getmac.

- Sobre copiar una determinada linea de un bloc de notas encontre esto que lo posteo el usuario "Leo Gutiérrez" pero tampoco me funciono.
   
@echo off
    (
    echo 4, 4l
    echo e
    echo e
    ) | edlin file.txt | findstr /v /i "^Final" | findstr /v /i "^\*4.*" | findstr /v /i "^\*e.*$" > "temp.txt"
pause
    for /f "tokens=2 delims=()" %%a in (temp.txt) do (
    echo Numero : %%a
    )
    set /p "="
    exit /b 0
pause

- Al ejecutarlo me dice no se reconoce edlin como un comando interno o externo.

- Y para nombrar o renombrar una Pc encontre esto y si me funciono.

@echo off
cls
echo Presione Una Tecla Para Ingresar Automaticamente El Nuevo Nombre Del Equipo
echo.

pause
   
reg add HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\/v ComputerName /t REG_SZ /d %1 Usuario0
cls
reg add HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\/v ComputerName /t REG_SZ /d %1 Usuario0
cls
reg add HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters /v "NV Hostname" /t REG_SZ /d %1 Usuario0
cls
reg add HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters /v Hostname /t REG_S

- Espero puedan ayudarme con mis errores o si tienen una mejor solucion tambien es bienvenida, por otro lado quisiera saber lo del "no se reconoce edlin como un comando interno o externo" A que se debe eso? De ante mano Gracias.

Eleкtro

#1
Para obtener la salida de un comando debes usar FOR /F.

Te muestro mi solución:

Código (dos) [Seleccionar]
@Echo OFF & Title Rename ComputerName

Set "MAC="
Set "PCName="

SET /P "PCName=Provide a new computer name: "

FOR /F "Tokens=1 Delims= " %%@ IN (
'getmac.exe ^| FIND "\"'
) DO (
Set "MAC=%%@" & REM Obtain address
Call Set "MAC=%%MAC:-=%%" & REM Delete Dash character "-"
Call Set "MAC=%%MAC:~6%%" & REM Take last 6 characters.
)

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v "ComputerName" /D "%PCName%%MAC%" /F 1>NUL

Pause&Exit


EDITO:
No leí esta duda.
Cita de: Slikp en  8 Diciembre 2013, 20:47 PMquisiera saber lo del "no se reconoce edlin como un comando interno o externo" A que se debe eso?

Se debe a que no existe el comando EDLIN en tu PC. Edlin es un comando de WindowsXP.

Saludos!








Slikp

#2
- Buenas Tardes EleKtro H@cker, Gracias por responder a mi duda.

- Probe tu script y no me funciono en Primer lugar me pide ingresar Un nombre luego doy enter y termina el programa, pero no me cambia el nombre de la pc.

- EDITO: Lo probe en W7 y no me funciono y asi como me has dado el script Funcionara Para Xp ??, La verdad busco que funcione para XP solo que ahorita no tengo la oportunidad de probarlos en las pc con XP si no hasta mañana.

- Por cierto Si modifico tu script de esta manera Funcionara??


   @Echo OFF & Title Rename ComputerName
   
   Set "MAC="
   
   FOR /F "Tokens=1 Delims= " %%@ IN (
   'getmac.exe ^| FIND "\"'
   ) DO (
   Set "MAC=%%@" & REM Obtain address
   Call Set "MAC=%%MAC:-=%%" & REM Delete Dash character "-"
   Call Set "MAC=%%MAC:~6%%" & REM Take last 6 characters.
   )
   
   REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v "ComputerName" /D "CualQuierNombre%MAC%" /F 1>NUL
   
   Pause&Exit


- Fijate que Elimine

Set "PCName="

SET /P "PCName=Provide a new computer name: "


- Y Cambie.


REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v "ComputerName" /D "%PCName%%MAC%" /F 1>NUL


- Por.


   REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v "ComputerName" /D "CualQuierNombre%MAC%" /F 1>NUL

Eleкtro

#3
Cita de: Slikp en  8 Diciembre 2013, 23:11 PM- Probe tu script y no me funciono en Primer lugar me pide ingresar Un nombre luego doy enter y termina el programa, pero no me cambia el nombre de la pc.
La modificación del registro requiere un reinicio de la sesión del usuario para que los cambios surgan efecto, reinicia tu PC para ver el nuevo nombre del PC.

Cita de: Slikp en  8 Diciembre 2013, 23:11 PMAsi como me has dado el script Funcionara tanto para W7 como Para Xp ??
Si, la aplicación getmac.exe está disponible en WinXP, y la subclave de registro es idéntica.

Cita de: Slikp en  8 Diciembre 2013, 23:11 PMSi modifico tu script de esta manera Funcionara??
Si, no te preocupes, la modificación que hiciste es correcta.

Pero ten en cuenta que hay un límite máximo de longitud para establecer el nombre del PC, es muy posible que si agregas un nombre demasiado largo mediente el registro, windows automáticamente lo acorte, o símplemente no puedas iniciar sesión, lo he verificado en XP y al agregar un nombre demasiado largo se produce un error en el proceso lssas negando el inicio del escritorio, ten cuidado.

Desconozco el límite exacto (además de una versión de Windows a otra el número quizás podría variar), pero lo puedes verificar tu mismo intentando escribir un nombre largo en la caja de texto donde se establece el nombre del PC, de todas formas esto dice Microsoft:

CitarThe recommended length of the Computer Name for most languages is 15 characters or less.
For languages that require more storage space per character, such as Chinese, Japanese, and Korean, the recommended length is 7 characters or less.

Así que asegúrate de limitar la longitud de la cadena del nombre con la MAC ya agregada al nombre. En el Script que te mostré tienes un ejemplo de como hacer un Substring:
%String:~START,END%

Saludos.








Slikp

- Muchas Gracias EleKtro H@cker, Reinicio la Pc y te aviso. Sin embargo te comento que con este:



@echo off
cls
echo Presione Una Tecla Para Ingresar Automaticamente El Nuevo Nombre Del Equipo
echo.

pause
   
reg add HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\/v ComputerName /t REG_SZ /d %1 Usuario0
cls
reg add HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\/v ComputerName /t REG_SZ /d %1 Usuario0
cls
reg add HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters /v "NV Hostname" /t REG_SZ /d %1 Usuario0
cls
reg add HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters /v Hostname /t REG_S



- Que fue el que potee al principio no era necesario reiniciar la Pc por eso la confusion de si tu script funcionaba...

Eleкtro

#5
Si intentas modificar manuálmente el nombre del PC verás como Windows te avisa de que se requiere un reinicio para efectuar el cambio, no me lo invento.
De todas formas al usar tanto el Script que te mostré como el que tu mostraste, sin reiniciar puedes ver el nuevo nombre en el panel de control en las propiedades avanzadas del sistema, pero iguálmente se requiere un reinicio para finalizar la modificación.

Lo que ocurre es que en en tu script estás modificando más valores aparte del nombre del equipo, como el nombre del dominio y el del PC activo,
quizás el problema podría ser que no hayas usado el término correcto para referirte a lo que reálmente pretendes modificar (el nombre del PC), si quieres modificar todas esas cosas entonces combina esas 4 órdenes con la que yo puse en mi script, es así de simple.

Código (dos) [Seleccionar]
reg add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName" /v "ComputerName"  /d "CualQuierNombre%MAC%" /F 1>NUL
reg add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName"       /v "ComputerName"  /d "CualQuierNombre%MAC%" /F 1>NUL
reg add "HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters"               /v "NV Hostname"   /d "CualQuierNombre%MAC%" /F 1>NUL
reg add" HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters"               /v "Hostname"      /d "CualQuierNombre%MAC%" /F 1>NUL


Saludos!








Slikp

- Muchisimas Gracias EleKtro H@cker, ya funciona perfectamente por otro lado no deseo modificar el nombre del domino entonces me imagino que debo eliminar las 2 lineas que tienen Hostname no ? combine tu codigo con el que yo encontre y funciona todo bien, aun hay mas cosas que deseo hacer con este script pero por lo pronto me conformo con esto, mejor me sigo enfocando en estudiar mas sobre batch ya que tengo mucho que aprender.


    @Echo OFF & Title Rename ComputerName
     
    Set "MAC="
    Set "PCName="
     
    SET /P "PCName=Provide a new computer name: "
     
    FOR /F "Tokens=1 Delims= " %%@ IN (
    'getmac.exe ^| FIND "\"'
    ) DO (
    Set "MAC=%%@" & REM Obtain address
    Call Set "MAC=%%MAC:-=%%" & REM Delete Dash character "-"
    Call Set "MAC=%%MAC:~6%%" & REM Take last 6 characters.
    )

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\/v ComputerName /t REG_SZ

/d "%PCName%%MAC%" /F 1>NUL
cls
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\/v ComputerName /t REG_SZ /d %1

"%PCName%%MAC%" /F
cls
REG ADD HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters /v "NV Hostname" /t REG_SZ /d %1

"%PCName%%MAC%" /F 1>NUL
cls
REG ADD HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters /v Hostname /t REG_S /d %1 "%PCName%

%MAC%" /F 1>NUL 1>NUL
cls
     
    Pause&Exit



- Por cierto una cosa mas aun no entiendo lo que me dijistes sobre "Para obtener la salida de un comando debes usar FOR /F", lo que no entiendo es como capturas dicha salida en una variable y luego la impremes en un bloc de notas intente con esto pero no funciono.


@Echo OFF & Title Rename ComputerName

Set "MAC="

FOR /F "Tokens=1 Delims= " %%@ IN (
'getmac.exe ^| FIND "\"'
) DO (

Set "MAC=%%@" >"%USERPROFILE%\desktop\resultado.txt"
)

pause

- Igual que antes creo el bloc de notas pero sin nada.

Eleкtro

El problema está aquí:
CitarSet "MAC=%%@" >"%USERPROFILE%\desktop\resultado.txt"

Sería así:
Echo %%@>"%USERPROFILE%\desktop\resultado.txt"

Lo que has intentado hacer no tienen ningún sentido, debes estudiar que son y como se usan los Operadores de redirección y los Búcles/Loops/Fors.

-> http://ss64.com/nt/syntax-redirection.html
-> http://ss64.com/nt/for_f.html

Además, no caigas en el error de pensar que todo se debe escribir en un archivo de texto para crear variables u otras cosas... como has visto yo no he necesitado hacer eso.

Saludos








Slikp

- No habia tenido tiempo para pasar por estos lados debido al trabajo y aprovechando el tiempo que tengo paso para darte las Gracias EleKtro H@cker, ya pude terminar por completo el script justo como lo necesitaba.

- Con respecto a lo de imprimir la variable en un bloc de notas, bueno me daba mucha curiosidad del como hacerlo.