2009-06-15 13 views
41

me gustaría convertir esta sintaxis /bin/sh en un archivo por lotes de Windows ampliamente compatibles:¿Cómo almacenar el nombre de host en una variable en un archivo .bat?

host=`hostname` 
echo ${host} 

Cómo hacer esto de manera que va a trabajar en cualquier Windows Vista, Windows XP, Windows 2000 y la máquina?

Para aclarar: me gustaría continuar en el programa y usar el nombre de host como está almacenado en la variable host. En otras palabras, el objetivo más amplio del programa no es simplemente repetir el nombre de host.

Respuesta

49

Normalmente leo salida de comando en variables usando el comando FOR, ya que guarda tener que crear archivos temporales. Por ejemplo:

FOR /F "usebackq" %i IN (`hostname`) DO SET MYVAR=%i 

nota, la declaración anterior funcionará en la línea de comandos, pero no en un archivo por lotes. Para usarlo en el archivo por lotes escapar de la % en la declaración FOR poniéndolos en dos ocasiones:

FOR /F "usebackq" %%i IN (`hostname`) DO SET MYVAR=%%i 
ECHO %MYVAR% 

Hay mucho más que puede hacer con FOR. Para obtener más información, simplemente escriba HELP FOR en el símbolo del sistema.

+0

muy agradable, aunque eso para la construcción de bucle está muy sobrecargado IMO. Cambiará para usar esto. ¡Gracias! –

+1

Tienes razón: FOR es básicamente la navaja suiza de scripts por lotes, ya que terminas utilizándolo para resolver la mayoría de los problemas. –

+0

Si desea repetir la asignación (para este ejemplo no tiene sentido, ya que solo consultaría el nombre de host una vez en una ejecución), no olvide utilizar 'SETLOCAL ENABLEDELAYEDEXPANSION' (ver' AYUDA SETLOCAL') y use '! MYVAR!' en lugar de '% MYVAR%' –

44

hmm - algo como esto?

set host=%COMPUTERNAME% 
echo %host% 

EDITAR: la expansión de la respuesta de las fluctuaciones y el uso de una técnica en una respuesta a this question para establecer una variable de entorno con el resultado de ejecutar una aplicación de línea de comandos:

@echo off 
hostname.exe > __t.tmp 
set /p host=<__t.tmp 
del __t.tmp 
echo %host% 

En cualquiera de los casos, 'host' se crea como una variable de entorno.

+0

que funciona - gracias –

1

Basta con crear un archivo .bat con la línea

hostname 

en ella. Eso es. Windows también es compatible con el comando de nombre de host.

+1

Lo siento, debería haber sido más clara. quería usar el valor almacenado en la variable, no simplemente repetirlo. –

6

Por qué no tan ?:

set host=%COMPUTERNAME% 
echo %host% 
10

estoy usando la variable de entorno COMPUTERNAME:

copy "C:\Program Files\Windows Resource Kits\Tools\" %SYSTEMROOT%\system32 
srvcheck \\%COMPUTERNAME% > c:\shares.txt 
echo %COMPUTERNAME% 
Cuestiones relacionadas