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