Regex 在执行Windows文件搜索时,如何忽略前x个字符?
环境:Windows 2003服务器 问题: 在执行Windows文件搜索时,如何忽略文件名的前x个字符? 我正在尝试查找其名称包含特定单词的所有文件,但问题是,我不想在每个文件名的前10个字母中列出包含搜索短语的文件 我该怎么做?有什么工具可以让我这么做吗? 我发现了以下工具GREPWIN:,它允许使用REGEX进行文件搜索,但我不知道如何使用REGEX忽略前10个字母 示例: 搜索词:测试 档案:Regex 在执行Windows文件搜索时,如何忽略前x个字符?,regex,windows,search,wildcard,Regex,Windows,Search,Wildcard,环境:Windows 2003服务器 问题: 在执行Windows文件搜索时,如何忽略文件名的前x个字符? 我正在尝试查找其名称包含特定单词的所有文件,但问题是,我不想在每个文件名的前10个字母中列出包含搜索短语的文件 我该怎么做?有什么工具可以让我这么做吗? 我发现了以下工具GREPWIN:,它允许使用REGEX进行文件搜索,但我不知道如何使用REGEX忽略前10个字母 示例: 搜索词:测试 档案: testteblah.TXT-此项将被忽略 BLAHBLAHBLtest.TXT-这一个应该
- testteblah.TXT-此项将被忽略
- BLAHBLAHBLtest.TXT-这一个应该显示在搜索中
.{10}test
这个正则表达式之所以有效,是因为如果没有10个字符,就不会发生匹配,然后进行
测试 在网上做了一些研究之后,我得出了以下正则表达式,可以忽略前10个字母:
(?@ECHO-OFF)
SETLOCAL
设置“sourcedir=U:\sourcedir”
对于/f“delims=“%%a IN('dir/s/b/a-d”%sourcedir%\*test**“)DO(
SETLOCAL ENABLEDELAYEDEXPANSION
设置“n10=%%~na”
设置“n10=!n10:~0,10!”
设置“n10a=!n10:测试=!”
如果/i“!n10a!”eq“!n10!”回显%%a
端部
)
后藤:EOF
这里有一个简单的批处理作业来执行该任务,它不使用regex.soz
dir/s/b
生成匹配文件名列表。这些文件名由for
命令逐个处理,如下所示:
选择名称部分的前10个字符,然后将这10个字符中的任何字符串test
替换为空。如果结果没有变化,则显示文件名
当然,您可以用%1
替换整个测试
,并作为
本批试验
- 将
test
替换为zork
或puffin
或任何内容
如果愿意,您还可以将10
替换为不同长度选择的参数,或者将directoryname作为参数
要在找到的文件中搜索,可以替换
ECHO %%~a
与
这将显示文件中包含目标字符串的行(但有关find
部分如何工作的详细信息,请参阅findstr
文档-您不指明要查找的内容)
或与
(
findstr "thingtosearchfor" "%%~a" >nul
if not errorlevel 1 ECHO %%~a
)
如果要显示要查找的文本所在的文件名
请注意,括号在第二种情况下很重要,因为它是一个多行命令,在我测试它的第一次时是可选的,但它不起作用。尽管如此,以下命令仍然有效:(?@jjj您使用了哪个解析器?我使用了.Net
的解析器。我甚至没有看到.Net的选项,它在PHP和Python中工作,我在使用PowerGREP工具的搜索中成功地使用了上面的正则表达式。这确实是一个非常好的解决方案,因为它不需要任何第三方工具…我将此标记为已接受的答案。Magoo,可以吗您还发布了一个脚本,用于在文件内容中进行搜索?所以,不仅仅是文件名?
(
findstr "thingtosearchfor" "%%~a" >nul
if not errorlevel 1 ECHO %%~a
)