2009-06-15 7 views
41

Je voudrais convertir cette syntaxe /bin/sh dans un script de traitement par lots de Windows largement compatible:Comment stocker le nom d'hôte dans une variable dans un fichier .bat?

host=`hostname` 
echo ${host} 

Comment faire cela pour que cela fonctionnera sur tout Windows Vista, Windows XP, Windows 2000 et la machine?

Pour clarifier: Je voudrais ensuite continuer dans le programme et utiliser le nom d'hôte tel qu'il est stocké dans la variable host. En d'autres termes, le plus grand objectif du programme n'est pas de simplement faire écho au nom d'hôte.

Répondre

49

Je lis généralement la sortie de la commande dans les variables en utilisant la commande FOR car cela évite d'avoir à créer des fichiers temporaires. Par exemple:

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

Notez que l'instruction ci-dessus fonctionnera sur la ligne de commande mais pas dans un fichier de commandes. Pour l'utiliser dans le fichier batch échapper à la % dans la déclaration FOR en les mettant deux fois:

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

Il y a beaucoup plus que vous pouvez faire avec FOR. Pour plus de détails, tapez simplement HELP FOR à l'invite de commande.

+0

très agréable, bien que pour la construction de boucle est fortement surchargé IMO. Passera à utiliser cela. Merci! –

+1

Vous avez raison - FOR est fondamentalement le couteau suisse des scripts batch dans lequel vous finissez par l'utiliser pour résoudre la plupart des problèmes. –

+0

Si vous voulez répéter l'assignation (Pour cet exemple, cela n'a pas de sens, car vous n'interrogerez le nom d'hôte qu'une seule fois) alors n'oubliez pas d'utiliser SETLOCAL ENABLEDELAYEDEXPANSION' (voir 'HELP SETLOCAL') et utilisez '! MYVAR!' au lieu de '% MYVAR%' –

44

hmm - quelque chose comme ça?

set host=%COMPUTERNAME% 
echo %host% 

EDIT: étendre sur la réponse de la gigue et en utilisant une technique dans une réponse à this question pour définir une variable d'environnement avec le résultat de l'exécution d'une application en ligne de commande:

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

Dans les deux cas, 'host' est créé en tant que variable d'environnement.

+0

qui fonctionne - merci –

1

il suffit de créer un fichier .bat avec la ligne

hostname 

en elle. C'est tout. Windows prend également en charge la commande hostname.

+1

désolé, j'aurais été plus clair. voulait utiliser la valeur stockée dans la variable, pas simplement l'écho. –

6

Pourquoi pas ?:

set host=%COMPUTERNAME% 
echo %host% 
10

J'utilise la variable d'environnement COMPUTERNAME:

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