Как сравнить HOSTNAME с переменной - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть некоторые данные в текстовом файле с именем 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 голосов
/ 05 сентября 2018

Хорошо, я публикую это с несколькими условиями, которые у вас есть в вашем сообщении. Я предполагаю, что вы пытаетесь отобразить результаты (Машины) рядом с именем вашего текущего компьютера. Например, если вы используете DESKTOP-UKUEA78 и запускаете скрипт, скрипт вернет Machine1,Machine2.

Теперь давайте начнем. То, как вы используете > __hName.tmp, совершенно не нужно, поскольку for /f "delims=" %%I in ('hostname') do set CurrentHost=%%I захватит ваше имя хоста и установит его в виде строки.

Для процесса, который вы используете для поиска в текстовом документе, есть гораздо более эффективный способ, который использует FindStr /I для поиска всех строк, содержащих ваше текущее имя хоста. Это вернет DEKSTOP-UKUEA78:Machine1,Machine2, если ваше имя хоста DEKSTOP-UKUEA78. Чтобы избавиться от имени хоста перед именем механизма, мы можем использовать простой синтаксис-замена .

Сценарий, приведенный ниже, будет 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
...