Bagaimana menemukan nama PC dalam skrip batch?

18

Bagaimana saya menemukan nama PC yang menjalankan program batch saya di atasnya?

Saya ingin mencari nama PC yang menjalankan program batch saya dan dapat menyimpannya sebagai variabel. Ada bantuan?

Rory Durrant
sumber
4
Anda dapat mengambil hostname sistem dari baris perintah cmd atau PowerShell hostname. Anda tidak perlu menyimpannya sebagai var, cukup panggil inline sesuai kebutuhan.
Frank Thomas
@FrankThomas - Mengapa Anda tidak memberikan ini sebagai (mungkin dengan contoh singkat) sebagai gantinya?
Nifle
2
hostnameadalah exe, dan saat mengeluarkan nama mesin pada konsol, itu akan menjadi non-sepele untuk menangkapnya dalam file batch. Untungnya, sudah ada set variabel lingkungan, dan tersedia ( ComputerName) untuk digunakan pada sistem windows biasa.
Vikas Gupta

Jawaban:

10

Seperti yang dijawab Vikas Gupta, Anda dapat menggunakan %COMPUTERNAME%variabel lingkungan yang telah ditentukan sebelumnya yang sudah berisi nama komputer. Dari sudut pandang praktis, inilah yang Anda butuhkan.

Namun, dimungkinkan untuk file batch untuk menulis nilai secara berlebihan, sehingga tidak dijamin bahwa nilainya benar.

Anda dapat menggunakan WMIC untuk secara langsung membaca nama komputer.

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

Loop FOR ekstra menghilangkan karakter carriage return yang tidak diinginkan yang merupakan artefak dari FOR / F yang berinteraksi dengan output Unicode dari WMIC. Dengan hanya satu loop ada carriage return di akhir setiap baris yang dapat menyebabkan masalah.

dbenham
sumber
1
apakah ada alasan untuk menggunakan wmic bukan hanya menelepon hostname?
eis
Saya memikirkan itu setelah saya menulis jawabannya. Tentunya akan lebih sederhana. Saya bukan ahli dalam masalah ini, tetapi berdasarkan serverfault.com/q/260563/201695 , saya pikir nama host dan nama komputer tidak dijamin sama. Tapi saya pikir mereka seharusnya sama dalam keadaan normal.
dbenham
26

Di Windows, biasanya variabel lingkungan sudah diatur dan tersedia untuk Anda gunakan -

echo %ComputerName%
Vikas Gupta
sumber
1
Versi Windows apa yang berlaku untuk ini? (Bekerja untuk saya di Windows 7.)
David Richerby
1
Variabel ini hadir setidaknya sepanjang jalan kembali ke Windows NT.
Saya katakan Reinstate Monica
cukup menarik, itu tidak akan bekerja di PowerShell; hanya di cmd.exe. aneh itu.
Frank Thomas
Powershell memiliki caranya sendiri untuk mewakili hal-hal khusus seperti Variabel Lingkungan ... berikut karya -Get-Item Env:\ComputerName
Vikas Gupta
1
@VikasGupta Anda hanya bisa menggunakan $env:computername(case-insensitive juga).
Bob
0

Di PowerShell Anda juga dapat menggunakan:

[Environment]::MachineName

Di sini nilainya berasal dari .Net sehingga menghindari masalah penggunaan $Env:ComputerName.

Stef
sumber
Apa masalah menggunakan $Env:ComputerName?
Bayangan