如何在批处理脚本中查找PC名称?


18

我如何找到在其上运行批处理程序的PC的名称?

我想找到正在运行批处理程序的PC的名称,并能够将其存储为变量。有什么帮助吗?


4
您可以使用cmd或powershell命令行从中检索系统的主机名hostname。您无需将其存储为var,只需在需要时内联调用即可。
弗兰克·托马斯

@FrankThomas-您为什么不提供此答案(也许有一个简短的示例)呢?
Nifle 2014年

2
hostname是一个exe文件,虽然它在控制台上输出计算机名称,但将其捕获到批处理文件中并非易事。幸运的是,已经有一个环境变量集,并且可以ComputerName在典型的Windows系统上使用()。
Vikas Gupta 2014年

Answers:


10

正如Vikas Gupta回答的那样,您可以使用%COMPUTERNAME%已经包含计算机名称的预定义环境变量。从实际的角度来看,这应该是您所需要的。

但是,批处理文件可能会覆盖该值,因此不能保证该值是正确的。

您可以使用WMIC直接读取计算机名称。

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

额外的FOR循环消除了不必要的回车字符,这些字符是FOR / F与WMIC的Unicode输出交互的产物。只有一个循环,每行的末尾都有一个回车符,这可能会引起问题。


1
有使用Wmic而不是仅仅打电话的理由hostname吗?
eis 2014年

我写完答案后就想到了这一点。这肯定会更简单。我不是这些问题的专家,但是基于serverfault.com/q/260563/201695,我认为不能保证主机名和计算机名相同。但是我认为它们在正常情况下应该是相同的。
dbenham

26

在Windows上,通常已经设置了一个环境变量,供您使用-

echo %ComputerName%

1
这适用于哪些Windows版本?(在Windows 7中为我工作。)
David Richerby 2014年

1
此变量至少一直存在到Windows NT。
我说恢复莫妮卡2014年

有趣的是,它无法在Powershell中运行;仅在cmd.exe中。奇怪的是。
弗兰克·托马斯

Powershell拥有自己的方式来表示特殊的事物,例如环境变量...以下作品Get-Item Env:\ComputerName
Vikas Gupta 2014年

1
@VikasGupta您可以使用$env:computername(也不区分大小写)。
鲍勃

0

在PowerShell中,您还可以使用:

[Environment]::MachineName

这里的值来自.Net,因此避免了使用的问题$Env:ComputerName


使用有什么问题$Env:ComputerName
影子”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.