【问题标题】:how to stop echo command from displaying variables which are not set?如何停止 echo 命令显示未设置的变量?
【发布时间】:2020-04-20 13:47:18
【问题描述】:

我正在开发一个应用程序,该应用程序要求我的用户共享他们的 Windows 机器的完全限定域名。

为了帮助我的用户提取他们机器的 FQDN,我想分享简单的命令行步骤,他们可以复制/粘贴并在终端上执行以获得结果。

我在想下面的命令来提取本地机器的 FQDN:

echo %COMPUTERNAME%.%USERDNSDOMAIN%

但是这个命令的问题很少。

  1. 它以全大写形式提供输出。 (我可以忍受)

  2. 如果未设置变量,则输出不正确。

例如

如果 USERDNSDOMAIN 值未设置,那么,您将获得以下输出:

echo %COMPUTERNAME%.%USERDNSDOMAIN% //

ClientComputerName.%USERDNSDOMAIN% //

如果变量的值未设置,有什么方法可以停止回显变量?

请注意,我只想通过 CMD 提示符提取我的 windows 机器的“完全限定域名”。

【问题讨论】:

  • 哦,伙计,您已经非常接近自己找到答案了。您要查找的短语是“如果未定义”。
  • @avery_larry - 我不知道,我认为if defined userdnsdomain echo %computername%.%userdnsdomain% 很简单。
  • 您将命令行输出与批处理文件输出混淆了。在批处理文件中,回显未定义变量的输出不会显示任何内容。你的输出是这样的:ClientComputerName..
  • 是的;但我认为ipconfig 以独立于语言的相同顺序返回数据,所以我可能会使用set "host=" & set "dns=" & for /F "delims=" %I in ('ipconfig /all ^| findstr /IC:". : "') do @if not defined host (set "host=%I") else if not defined dns (set "dns=%I") 然后echo/%host:*. : =%.%dns:*. : =%...
  • @aschipfl 您对“简单命令行步骤”的想法与我的想法大不相同。大声笑

标签: windows batch-file cmd fqdn


【解决方案1】:

您可以使用 PowerShell 获取 FQDN 名称。

=== Get-FQDN.bat

@ECHO OFF
FOR /F %%A IN ('powershell -NoLogo -NoProfile -Command ^
    "([System.Net.Dns]::GetHostByName($Env:COMPUTERNAME)).HostName"') DO (
    SET "THEFQDN=%%A"
)
ECHO %THEFQDN%

如果您有多个用户,那么您肯定有一些方法可以在他们上安装程序和批处理文件。一旦这个批处理文件脚本被安装到用户 PATH 上的一个目录中,它就是一个单行命令。

Get-FQDN

【讨论】:

  • 我不相信 OP 正在使用批处理文件。我也不相信 OP 想要多个命令。即使将其设为单行非批处理文件命令,它似乎也可能违反“简单命令行步骤”。
【解决方案2】:

1、请注意,“USER DNS Domain”不是计算机加入的域,而是登录的USER所属的域。

如果您以来自受信任域、子域或父域的用户身份登录,则会显示该域。

因此,如果您以 LOCAL 帐户登录,它将是空白的(您可能会遇到这种情况)

不过,有一种相当简单的方法可以获取实际的计算机域,即使用NLTest。 (对于像我这样的人,我永远无法弄清楚为什么 Microsoft 没有使用此信息预先填充变量。)

在 CMD 行只需将其转储到命令提示符中(我相信您需要以管理员权限运行,但我尚未测试):

FOR /F "tokens=3" %_ IN ('nltest /DOMAIN_TRUSTS /PRIMARY ^|FIND /I "0:"') DO @(ECHO.%COMPUTERNAME%.%_)

结果将全部大写,因为这是 Microsoft 显示此信息的方式。

这是一个示例输出:

MYLAPTOP.USERS.MYDOMAIN.LOCAL

但是在重读时,您希望用户知道如何自己做一些事情,所以如果您可以发送一封参考电子邮件,或者在他们每次需要时将其交给他们。

如果您只是想轻松获得此信息和其他信息,您可以使用 BGInfo 或其他类似的选项来设置桌面背景。

或者,您可以更改登录脚本以生成一个简单的文本文件,其中包含用户每次登录时的所有信息,并放置在您告诉他们查看的特定文件夹中。

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 2019-04-13
    • 2011-12-16
    • 2020-10-27
    • 2012-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多