2

我正在尝试弄清楚如何修改此脚本以进行精确搜索。我需要搜索一个字符串(例如:“123.12”——带引号)

这是我到目前为止的脚本:

findstr %1 %systemdrive%\test\data.txt

IF %ERRORLEVEL% GTR 0 (
--- TRUE- DO SOMETHING
) ELSE (
--- FALSE- EXIT
)

这是我的文件 data.txt

“123.123” “345.345” “794.922”

(带引号)

问题是 findstr 正在查找解析的值:123.12,但它在我的列表中不存在。它错误地将 123.123 和 123.12 检测为其中的一部分。这就是为什么我想知道是否有任何方法可以使用引号进行搜索,我的意思是,格式化解析的值并将其添加引号以在文本文件中搜索。

我试过“%1”但没有成功。

先感谢您 !!


编辑

我正在尝试修改防火墙批处理脚本以阻止某些 IP

这是脚本

ipconfig | findstr "Address" | qut -d: -f 2 | qni > %systemdrive%\Qaas\host_ip.txt
findstr \"%1\" %systemdrive%\Qaas\bin\host_ip.qas || findstr \"%1\" %systemdrive%\Qaas\white_list.txt || findstr \"%1\" %systemdrive%\Qaas\blocqedips.qas

IF %ERRORLEVEL% GTR 0 (
echo "NOT FOUND"
netsh ipsec stat add filter filterlist="IP List" srcaddr=%1 dstaddr=Me description=%1 protocol=any mirrored=yes
echo Blocked IP address %1, reason - %2 connections on %3 >> %systemdrive%\Qaas\Qaas-%dw%-%mm%-%dd%-%hh%.log
echo %1 >> %systemdrive%\Qaas\blocqedips.qas
) ELSE (
echo "FOUND"
echo %1 is either host IP or already blocked earlier >> %systemdrive%\Qaas\Qaas-%dw%-%mm%-%dd%-%hh%.log
)

这是被阻止的 IP 文件: http: //pastebin.com/cP4BteDM

现在,尝试阻止例如 10.02.0,我在控制台“10.02.02”中收到。我猜是因为 10.02.0 是“instr”“10.02.02”。由于 FINDSTR 语句中存在这个问题,例如,我将永远无法禁止“10.02.0”。

谢谢你的帮助,我试过你的答案没有运气:S

4

2 回答 2

1

引号的转义字符是\" :试试这个:

C:\>echo "123.123" "345.345" "794.922" | findstr "\"123.12\""
C:\>echo %errorlevel%

编辑: 我仍然不确定我是否真的得到了这个问题,但是。这是我创建的一个非常简单的示例 bat,用于测试 paste.bin ip 地址:

@echo off
find """%~1"""  ips.txt 
echo %errorlevel%

使用 10.02.0 我得到 1,使用 10.02.02 我得到 0。我使用 FIND 而不是 FINDSTR 来避免 Electro Hacker 指出的点图案陷阱 - 因为您无法控制 %1 内的内容,它会更换起来有点困难。用 [.] 用三引号作为 " 是 " 的转义。而 %~1 用于第一个参数的取消引用值(可能没有必要)

于 2012-11-23T09:24:23.630 回答
1

如果您想要精确搜索,那么您可以过滤起始词和结束词行,并将点“。” 因为在 RegEx 中表示“任何字符”,您需要使用文字字符“。” 如果您想要更准确的结果,并且要转义双引号字符。

如果要进行不带引号的搜索,可以像这样扩展参数:

:: I've removed start & ending quotes of argument %1
findstr %~1 "%systemdrive%\test\data.txt" &&  (
--- TRUE- DO SOMETHING
) || (
--- FALSE- EXIT
)

这是您需要的确切正则表达式:

FINDSTR "\<\"123[.]123\"\>"

注意到第一个和最后一个引号仅用于使用 FINDSTR 命令将值括起来

这完全匹配:“123.123”(包括引号),无一例外,正则表达式搜索:

\<start of word , end of word\>

PS:对不起我的英语不好,我希望这对你有所帮助。

于 2012-11-23T10:18:50.840 回答