我在一个名为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这是我的第一个批处理项目,我无法弄清楚我哪里出错了。请有人帮帮我...
好吧,我发布了你的帖子中的几个条件。我假设您正在尝试回显当前计算机主机名旁边的结果(计算机)。例如,如果您使用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