web-dev-qa-db-ja.com

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の両方がこの行を解析しているため、何かをスクリーニングする必要があることを理解していますが、何をどのようにスクリーニングするかわかりません。これを機能させる方法は?

3
Papa Smurf

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%
4
Kevin K.