如何将HOSTNAME与变量进行比较

时间:2018-09-04 19:35:56

标签: windows batch-file command-line rdp

我在名为mData.txt的文本文件中有一些数据,数据看起来像这样:

Master1:H1M1,H2M1

Master2:H1M2,H7M2

VMVPC092015:H1,H2,H3

DEKSTOP-UKUEA78:Machine1,Machine2

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 这是我的第一个批处理项目,我无法弄清楚哪里出了问题。有人可以帮我吗...

1 个答案:

答案 0 :(得分:0)

好的,我发布的内容中包含您在发布中所具有的一些条件。我假设您正在尝试在当前计算机主机名旁边回显结果(机器)。例如,如果您在2018-08-03 1 alpha 1 2018-08-03 1 beta 2 2018-08-03 1 gamma 3 2018-08-03 1 omega 4 2018-08-03 2 alpha 4 2018-08-03 2 beta 3 2018-08-03 2 gamma 2 2018-08-03 2 omega 1 2018-08-04 1 alpha 3 2018-08-04 1 beta 1 2018-08-04 1 gamma 2 2018-08-04 1 omega 4 上并运行脚本,则脚本将返回DESKTOP-UKUEA78

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

对于您用于搜索文本文档的过程,有一种更有效的方法,那就是使用FindStr /I搜索包含当前主机名的所有行。如果您的主机名是DEKSTOP-UKUEA78:Machine1,Machine2,它将返回DEKSTOP-UKUEA78。要摆脱机械名称前面的主机名,我们可以使用简单的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