如何将HOSTNAME与变量进行比较

问题描述 投票:-1回答:1

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

Master1:H1M1,H2M1

Master2:H1M2,H7M2

VMVPC092015:H1,H2,H3

DESKTOP-UA78:机器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这是我的第一个批处理项目,我无法弄清楚我哪里出错了。请有人帮帮我...

windows batch-file command-line rdp
1个回答
0
投票

好吧,我发布了你的帖子中的几个条件。我假设您正在尝试回显当前计算机主机名旁边的结果(计算机)。例如,如果您使用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

下面的脚本将qazxsw poi它运行的主机名的机器名称。

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
© www.soinside.com 2019 - 2024. All rights reserved.