Jak znaleźć nazwę komputera w skrypcie wsadowym?

18

Jak znaleźć nazwę komputera z uruchomionym programem wsadowym?

Chciałbym znaleźć nazwę komputera, na którym działa mój program wsadowy i móc zapisać go jako zmienną. Jakaś pomoc?

Rory Durrant
źródło
4
możesz pobrać nazwę hosta systemu z wiersza poleceń cmd lub powershell za pomocą hostname. nie powinieneś przechowywać go jako var, po prostu przywołaj go w miarę potrzeby.
Frank Thomas
@FrankThomas - Dlaczego zamiast tego nie podasz (być może krótkiego przykładu) odpowiedzi?
Nifle,
2
hostnamejest exe i chociaż wyświetla nazwę maszyny na konsoli, przechwycenie jej w pliku wsadowym nie będzie łatwe. Na szczęście istnieje już zestaw zmiennych środowiskowych i dostępny ( ComputerName) do użycia w typowym systemie Windows.
Vikas Gupta

Odpowiedzi:

10

Jak odpowiedział Vikas Gupta, możesz użyć wstępnie zdefiniowanej %COMPUTERNAME%zmiennej środowiskowej, która już zawiera nazwę komputera. Z praktycznego punktu widzenia powinno to być wszystko, czego potrzebujesz.

Jednak plik wsadowy może nadpisywać wartość, więc nie ma gwarancji, że wartość jest poprawna.

Możesz użyć WMIC, aby bezpośrednio odczytać nazwę komputera.

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

Dodatkowa pętla FOR eliminuje niepożądane znaki powrotu karetki, które są artefaktem FOR / F oddziałującym z wyjściem WMIC w Unicode. Tylko jedna pętla ma znak powrotu karetki na końcu każdej linii, co może powodować problemy.

dbenham
źródło
1
czy istnieje powód, aby używać wmic zamiast po prostu dzwonić hostname?
eis
Myślałem o tym po napisaniu odpowiedzi. Z pewnością byłoby to prostsze. Nie jestem ekspertem w tych sprawach, ale na podstawie serverfault.com/q/260563/201695 uważam, że nazwa hosta i nazwa komputera nie są takie same. Ale myślę, że powinny być takie same w normalnych okolicznościach.
dbenham
26

W systemie Windows zazwyczaj zmienna środowiskowa jest już ustawiona i dostępna do użycia -

echo %ComputerName%
Vikas Gupta
źródło
1
Które wersje systemu Windows to dotyczy? (Pracował dla mnie w systemie Windows 7.)
David Richerby
1
Ta zmienna jest obecna przynajmniej od czasu powrotu do systemu Windows NT.
Mówię: Przywróć Monikę
Co ciekawe, nie będzie działać w PowerShell; tylko w cmd.exe. dziwne to.
Frank Thomas
Powershell ma swój własny sposób reprezentowania specjalnych rzeczy, takich jak Zmienne środowiskowe ... następujące prace -Get-Item Env:\ComputerName
Vikas Gupta
1
@VikasGupta Możesz po prostu użyć $env:computername(bez rozróżniania wielkości liter).
Bob
0

W PowerShell możesz także użyć:

[Environment]::MachineName

Tutaj wartość pochodzi z .Net, dzięki czemu unika się problemu korzystania $Env:ComputerName.

Stef
źródło
Jaki jest problem korzystania $Env:ComputerName?
Shadow