如何在批处理脚本中检测我是否在某台主机上?例如,如果我运行命令,hostname
它会给我当前计算机的主机名。有没有办法可以将其保存到变量中或直接将其与其他内容进行比较?
设置 hostnameVar=hostname` 如果“%hostnameVar%”==“Molly-Laptop”(回显笔记本电脑)
或者
如果主机名 == “Molly-Potato”(Echo notlaptop)
这些都不起作用。
答案1
正如您所发现的,您可以使用%computername%
。这是一个标准 Windows 环境变量明确说明您为何想要使用它。
此外,更直接地回答您的问题:
set hostnameVar=hostname
不起作用,因为这是将程序本身的名称分配给变量——而不是其结果。
因此,在命令提示符中输入上述内容后,如果您随后输入,%hostnameVar%
它就会像您输入/运行一样运行hostname
(并给您一个结果)。
这也是为什么你的第二个if
不起作用的原因——你本质上是在说If ("hostname") == ("this text string")
。由于文本字符串与程序名称不匹配,因此它将失败。
说了这么多,你能使用 FOR 循环批量将命令的输出重定向到变量:
@echo off
for /f "delims=" %%i in ('hostname') do set output=%%i
if "%output%" == "Molly-Laptop" (Echo laptop)
答案2
这似乎过于复杂,必须设置一个作为环境变量存在的变量。
请查看我建议的评论,因为我确信您已经解决了您的问题,对于任何着眼于未来的人来说,这只是一种更好的写作方式。
IF "%COMPUTERNAME%" EQU "MOLLY-LAPTOP" ECHO Laptop
IF "%COMPUTERNAME%" EQU "MOLLY-POTATO" ECHO Not Laptop
或者...
IF "%COMPUTERNAME%"=="MOLLY-LAPTOP" ECHO Laptop
IF "%COMPUTERNAME%"=="MOLLY-POTATO" ECHO Not Laptop
我不喜欢次要的陈述,所以我会遵循这个。
IF NOT "%COMPUTERNAME%" EQU "MOLLY-LAPTOP" ECHO Not Laptop
或者...
IF NOT "%COMPUTERNAME%"=="MOLLY-LAPTOP" ECHO Not Laptop