如何在 .bat 文件中将主机名存储到变量中?

59

我想将这个 /bin/sh 语法转换为广泛兼容的Windows批处理脚本:

host=`hostname`
echo ${host}

如何使其在任何Windows Vista、Windows XP和Windows 2000机器上都能正常工作?

澄清一下:我希望在程序中继续使用存储在变量host中的主机名。换句话说,该程序的更大目标不仅仅是回显主机名。


1
正如其他人所评论的那样 - 只需使用预先存在的环境变量%COMPUTERNAME%即可。 - JGFMK
6个回答

68

嗯 - 像这样的东西?

set host=%COMPUTERNAME%
echo %host%

编辑:在jitter的回答基础上进行扩展,并使用此问题的一个答案中的技术,设置一个环境变量以存储运行命令行应用程序的结果:

@echo off
hostname.exe > __t.tmp
set /p host=<__t.tmp
del __t.tmp
echo %host%

无论哪种情况,'host' 都被创建为环境变量。


58

我通常使用FOR命令将命令输出读入变量中,因为这样可以避免创建临时文件。例如:

FOR /F "usebackq" %i IN (`hostname`) DO SET MYVAR=%i

请注意,上述语句可以在命令行中使用,但不能在批处理文件中使用。若要在批处理文件中使用它,请通过将%FOR语句中重复两次来进行转义:

FOR /F "usebackq" %%i IN (`hostname`) DO SET MYVAR=%%i
ECHO %MYVAR%

你可以通过 FOR 做更多的事情。只需在命令提示符下键入 HELP FOR,即可了解更多详细信息。


1
非常好,尽管我认为那个for循环结构有点过载。我会转而使用这个。谢谢! - Edward Q. Bridges
1
你说得对 - FOR 基本上是批处理脚本的瑞士军刀,因为你最终会使用它来解决大多数问题。 - David Webb
11
“hostname”命令返回的内容与已存储在“%COMPUTERNAME%”环境变量中的内容相同。 - Dylan Beattie
6
“%COMPUTERNAME%” 的问题在于它是大写的,而 “hostname” 返回主机名的原始大小写。如果这很重要,则需要使用 “hostname” 方法。 - Adam Lindberg
echo %hostname% %hostname%
>echo %computername% mycomputername这些是Windows 7命令行示例(尝试从受限帐户和管理员帐户中执行)。正如您所观察到的,%computername%环境变量是唯一有效的,必须在使用之前定义%hostname%。在Windows中,命令行环境变量不区分大小写,因此您可以调整代码以适用于Linux。
- razvanone
显示剩余2条评论

12

我正在使用环境变量 COMPUTERNAME

copy "C:\Program Files\Windows Resource Kits\Tools\" %SYSTEMROOT%\system32
srvcheck \\%COMPUTERNAME% > c:\shares.txt
echo %COMPUTERNAME%

10
为什么不这样做呢?
set host=%COMPUTERNAME%
echo %host%

0
只需创建一个包含以下行的 .bat 文件:
hostname

就是这样。Windows也支持hostname命令。


1
抱歉,我应该表述得更清楚。我想要使用存储在变量中的值,而不仅仅是将其输出。 - Edward Q. Bridges

-1
 set host=%COMPUTERNAME%
 echo %host%

这个就够了,不需要额外的循环或大量的编码。


6
请问您能否解释一下,这个答案为什么比九年和九年半前相同的答案更好(或至少有所不同)? - Stephan
抱歉,没有检查它很久以前是否已经回答了。只是回答了一下,以确保未来的用户可以从中获得一些价值。 - Ariful Huq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接