【问题标题】:How to compare HOSTNAME to a variable如何将 HOSTNAME 与变量进行比较
【发布时间】:2018-09-04 19:35:56
【问题描述】:

我在一个名为 mData.txt 的文本文件中有一些数据,数据如下所示:

Master1:H1M1,H2M1

Master2:H1M2,H7M2

VMVPC092015:H1,H2,H3

DEKSTOP-UKUEA78:机器 1,机器 2

Master4:H1M4,H2M4


这是我的批处理文件中的一些示例代码:

@echo off
setLocal enableDelayedExpansion

:: Set hostname
hostname.exe > __hName.tmp
set /p hNameVar=<__hName.tmp
del __hName.tmp
echo %hNameVar%

for /f "usebackq" %%i IN (`hostname`) do   set hNameVar2=%%i
echo %hNameVar2%

for /f "tokens=1,2 delims=:" %%a in (mData.txt) do (
    set mName=%%a
    set hName=%%b
    if !mName!==%hNameVar2% (
        echo FoundIt
        pause
    )else (
        echo here: !mName!
        echo there: !hNameVar2! 
    )
)

我的桌面名称是:DESKTOP-UKUEA78

我希望这个脚本从文本文件的每一行中读取第一台机器名称,并确定该机器名称是否与我的桌面名称相同。

执行不断进入 else 子句。我也附上了截图。 hNameVar 和 hNameVar2 都产生相同的 o/p.ScreenShot 这是我的第一个批处理项目,我不太清楚我哪里出错了。有人能帮帮我吗...

【问题讨论】:

  • 通常) 和else 之间没有空格会导致语法错误。
  • 我想我比较这些值的方式有问题...添加空格没有帮助
  • 可能是某个主机名命令中某处的隐藏空间。尝试使用echo *%hNameVar%* 和echo *%hNameVar2%* 看看是否有明显不同。
  • 你的整个脚本没有降神,所以你想找到并列出这个例子:Machine1,Machine2 在主机名旁边?在你的情况下DESKTOP-UKUEA78..?
  • 将获取与主机名相对应的机器名称并将其传递给另一个脚本,该脚本应该启动所有虚拟机,在它们上运行特定进程等等......这只是一个特定场景的示例测试用例,我被困在..

标签: windows batch-file command-line rdp


【解决方案1】:

好的,我在你的帖子中有几个条件发布这个。我假设您正在尝试在当前机器主机名旁边回显结果(机器)。例如,如果您在DESKTOP-UKUEA78 上运行脚本,则脚本将返回Machine1,Machine2。

现在让我们开始吧,您使用&gt; __hName.tmp 的方式完全不需要,因为for /f "delims=" %%I in ('hostname') do set CurrentHost=%%I 将获取您的主机名 并将其设置为字符串。

对于您用于搜索文本文档的过程,有一种更有效的方法,那就是使用FindStr /I 来搜索包含您当前主机名的所有行。如果您的主机名是 DEKSTOP-UKUEA78,这将返回 DEKSTOP-UKUEA78:Machine1,Machine2。要去掉机器名前面的主机名,我们可以使用简单的syntax-replace。

下面的脚本将 ECHO 机器名作为它运行的主机名。

@ECHO OFF
setlocal enabledelayedexpansion

:: Get this PC's Host Name
for /f "delims=" %%I in ('hostname') do set CurrentHost=%%I

:: Grab lines that contain hostname only & extract machine name
for /f "tokens=1,2" %%G in ('FindStr /I "%CurrentHost%" "mData.txt" 2^>Nul') do (

set string=%%G
set string=!string:*:=%!

:: Echo Result - If two host of same type in file, will echo both.
echo Matching Machine Names For %CurrentHost%: !string!
echo(
)

pause

如果在DESKTOP-UKUEA78 上运行此脚本将返回以下内容:

Matching Machine Names For DESKTOP-UKUEA78: Machine1,Machine2

【讨论】:

  • 嘿约翰...非常感谢,伙计...原来我只是个白痴,文本文件中有一些不正确的条目...尽管我当然更喜欢您的解决方案。 ..去试试吧
猜你喜欢
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
相关资源
最近更新 更多