将 PowerShell 命令输出作为 bat(cmd)脚本中的变量获取

将 PowerShell 命令输出作为 bat(cmd)脚本中的变量获取

我尝试在某个 .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%

相关内容