我有一个文本文件,其中包含以下内容
Pool p c Dev Dev Total Enabled Used Free a b
------------ - - ----- ------------ -------- -------- -------- -------- --- ---
FC100 T F FBA RAID-3(1+1) 13849.1 13849.1 13119.4 7292.0 0 Ena
SATA500 T S FBA RAID-3(1+1) 50019.2 50019.2 46974.5 3044.9 Ena 0我希望显示文件中的extract FC100和SATA500,因为这两行包含"Ena“。我几乎没有批处理脚本的经验,所以用我有限的知识,我想出了以下脚本。
@ECHO OFF
setlocal enabledelayedexpansion
FOR /F "tokens=1,* delims= " %%a in (list.txt) DO (
if "%%b" NEQ "" (
set string=%%b
set substring= Ena
echo !string! |findstr "!substring!" > nul
if errorlevel 1 (
rem echo !SubString!
) else (
echo %%a
)
)
)上面的代码所发生的事情是,我得到了所需的输出,但我也得到了Pool,因为该行包含Ena in Enabled。如何提取只包含Ena且与Enabled不匹配的行。
电流输出
Pool
FC100
SATA500我试着在findstr中使用一些正则表达式魔法,但对我不起作用。注意-我可以用Perl解决这个问题,但不幸的是,我不能在系统上安装Perl,所以我必须批量安装。
发布于 2012-12-27 04:47:04
您可能希望将Ena作为一个完整的单词进行匹配。要做到这一点,你可以用\<和\>括起你的搜索词,也就是像这样改变substring赋值:
set "substring=\<Ena\>"顺便说一句,在循环的每次迭代中,可能不需要将substring赋给相同的值。你只能在循环之前赋值一次。
发布于 2012-12-27 04:16:06
@echo off
for /F "skip=1" %%a in ('findstr /C:" Ena" list.txt') do (
echo %%a
)EDIT:新的解决方案,可以在任何部分使用"Ena“字符串精确地查找线条
@echo off
for /F %%a in ('findstr /R /C:"\<Ena\>" list.txt') do (
echo %%a
)发布于 2012-12-27 03:58:56
试试这个:
set substring="Ena[^a-zA-Z]"[^a-zA-Z]指示findstr不要使用在Ena之后包含字母的字符串。
https://stackoverflow.com/questions/14045275
复制相似问题