Wie finde ich den PC-Namen in einem Batch-Skript?

18

Wie würde ich den Namen des PCs finden, auf dem mein Batch-Programm ausgeführt wird?

Ich möchte den Namen eines PCs finden, auf dem mein Stapelverarbeitungsprogramm ausgeführt wird, und ihn als Variable speichern können. Irgendeine Hilfe?

Rory Durrant
quelle
4
Sie können den Hostnamen eines Systems über die Befehlszeile cmd oder Powershell mit abrufen hostname. Sie sollten es nicht als var speichern müssen, sondern es einfach inline aufrufen, wenn Sie es benötigen.
Frank Thomas
@FrankThomas - Warum geben Sie dies nicht stattdessen (vielleicht mit einem kurzen Beispiel) als Antwort an?
Nifle
2
hostnameist eine Exe, und während der Computername auf der Konsole ausgegeben wird, ist es nicht trivial, ihn in einer Batchdatei zu erfassen. Glücklicherweise ist bereits eine Umgebungsvariable festgelegt und verfügbar ( ComputerName), um sie auf einem typischen Windows-System zu verwenden.
Vikas Gupta

Antworten:

10

Wie Vikas Gupta geantwortet hat, können Sie die vordefinierte %COMPUTERNAME%Umgebungsvariable verwenden, die bereits den Computernamen enthält. Aus praktischer Sicht sollte dies alles sein, was Sie brauchen.

Es ist jedoch möglich, dass eine Batchdatei den Wert überschreibt, sodass nicht garantiert werden kann, dass der Wert korrekt ist.

Sie können WMIC verwenden, um den Computernamen direkt zu lesen.

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

Die zusätzliche FOR-Schleife eliminiert unerwünschte Wagenrücklaufzeichen, die ein Artefakt von FOR / F sind, das mit der Unicode-Ausgabe von WMIC interagiert. Bei nur einer Schleife befindet sich am Ende jeder Zeile ein Wagenrücklauf, der Probleme verursachen kann.

Dbenham
quelle
1
Gibt es einen Grund, wmic zu verwenden, anstatt nur anzurufen hostname?
uvb
Daran habe ich gedacht, nachdem ich die Antwort geschrieben hatte. Es wäre sicherlich einfacher. Ich bin kein Experte für diese Probleme, aber basierend auf serverfault.com/q/260563/201695 denke ich, dass Hostname und Computername nicht garantiert identisch sind. Aber ich denke, sie sollten unter normalen Umständen gleich sein.
Dbenham
26

Unter Windows ist normalerweise bereits eine Umgebungsvariable festgelegt, die Sie verwenden können.

echo %ComputerName%
Vikas Gupta
quelle
1
Für welche Windows-Versionen gilt dies? (Arbeitete für mich in Windows 7.)
David Richerby
1
Diese Variable ist zumindest bis Windows NT vorhanden.
Ich sage Reinstate Monica
Interessanterweise funktioniert es jedoch nicht in einer Powershell. nur in cmd.exe. seltsam das.
Frank Thomas
Powershell hat seine eigene Art, spezielle Dinge wie Umgebungsvariablen darzustellen ... folgende Werke -Get-Item Env:\ComputerName
Vikas Gupta
1
@VikasGupta Sie könnten nur verwenden $env:computername(auch ohne Berücksichtigung der Groß- und Kleinschreibung).
Bob
0

In PowerShell können Sie außerdem Folgendes verwenden:

[Environment]::MachineName

Hier stammt der Wert von .Net, sodass das Problem der Verwendung vermieden wird $Env:ComputerName.

Stef
quelle
Was ist das Problem der Verwendung $Env:ComputerName?
Schatten