Come trovare il nome del PC in uno script batch?


18

Come troverei il nome del PC su cui è in esecuzione il mio programma batch?

Vorrei trovare il nome di un PC che esegue il mio programma batch ed essere in grado di memorizzarlo come variabile. Qualsiasi aiuto?


4
è possibile recuperare il nome host di un sistema dalla riga di comando cmd o powershell con hostname. non dovresti aver bisogno di memorizzarlo come var, semplicemente invocalo in linea quando ne hai bisogno.
— Frank Thomas,

@FrankThomas - Perché non fornisci questa risposta come (forse con un breve esempio)?
— Nifle,

2
hostnameè un exe e mentre genera il nome della macchina sulla console, non sarà banale catturarlo in un file batch. Fortunatamente, esiste già un set di variabili di ambiente e disponibile ( ComputerName) da utilizzare sul tipico sistema Windows.
— Vikas Gupta,

Risposte:


10

Come ha risposto Vikas Gupta, è possibile utilizzare la %COMPUTERNAME%variabile di ambiente predefinita che contiene già il nome del computer. Da un punto di vista pratico, questo dovrebbe essere tutto ciò di cui hai bisogno.

Tuttavia, è possibile che un file batch sovrascriva il valore, quindi non è garantito che il valore sia corretto.

È possibile utilizzare WMIC per leggere direttamente il nome del computer.

for /f "skip=1 delims=" %%A in (
  'wmic computersystem get name'
) do for /f "delims=" %%B in ("%%A") do set "compName=%%A"

Il ciclo FOR aggiuntivo elimina i caratteri di ritorno a capo indesiderati che sono un artefatto di FOR / F che interagisce con l'output Unicode di WMIC. Con un solo loop c'è un ritorno a capo alla fine di ogni riga che può causare problemi.


1
c'è un motivo per usare wmic invece di chiamare semplicemente hostname?
— eis,

Ci ho pensato dopo aver scritto la risposta. Sarebbe sicuramente più semplice. Non sono un esperto di questi problemi, ma sulla base di serverfault.com/q/260563/201695 , penso che il nome host e il nome del computer non siano garantiti uguali. Ma penso che dovrebbero essere uguali in circostanze normali.
— dbenham,

26

Su Windows, in genere una variabile di ambiente è già impostata e disponibile per l'uso:

echo %ComputerName%

1
A quali versioni di Windows si applica questo? (Ha funzionato per me in Windows 7.)
— David Richerby,

1
Questa variabile è presente almeno fino a Windows NT.
— Dico Reinstate Monica il

abbastanza interessante, tuttavia, non funzionerà in una PowerShell; solo in cmd.exe. strano.
— Frank Thomas,

Powershell ha il suo modo di rappresentare cose speciali come Variabili d'ambiente ... seguenti lavori -Get-Item Env:\ComputerName
— Vikas Gupta,

1
@VikasGupta Potresti semplicemente usare $env:computername(anche senza distinzione tra maiuscole e minuscole).
— Bob,

0

In PowerShell puoi anche usare:

[Environment]::MachineName

Qui il valore deriva da .Net, quindi evita il problema dell'utilizzo $Env:ComputerName.


Qual è il problema dell'utilizzo $Env:ComputerName?
— Shadow
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.