Хорошо, я публикую это с несколькими условиями, которые у вас есть в вашем сообщении. Я предполагаю, что вы пытаетесь отобразить результаты (Машины) рядом с именем вашего текущего компьютера. Например, если вы используете 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