我尝试在某个 .cmd 文件中获取主机的 FQDN。我们的 AD 域不连贯,因此"@echo %COMPUTERNAME%.%USERDNSDOMAIN%"
无法正常工作。我的意思是它可以工作,但返回错误的值。
我最终得到的解决方案是
powershell.exe -noninteractive -command[System.Net.Dns]::GetHostByName(($env:computerName)).HostName
它在命令行中运行良好。我试图将它放入我的 cmd 文件中的变量中:
FOR /F "tokens=* USEBACKQ" %%F IN (\`powershell.exe -noninteractive -command
[System.Net.Dns]::GetHostByName(($env:computerName)).HostName\`) DO (
SET var=%%F
)
ECHO %var%
但此时出现以下错误:).HostName`)是意料之外的。
我知道应该屏蔽某些内容,因为 cmd 和 powershell 都在解析此行,但不知道应该屏蔽什么以及如何屏蔽。如何让它发挥作用?
答案1
您需要转义里面的括号主题使用时FOR \F
FOR /F "tokens=* USEBACKQ" %%F IN (`powershell.exe -noninteractive -command [System.Net.Dns]::GetHostByName^(^($env:computerName^)^).HostName`) DO (
SET var=%%F
)
ECHO %var%