如何在进行 Windows 文件搜索时忽略前 x 个字符?

How to ignore first x characters when doing a Windows file search?

环境:Windows2003 服务器

问题: 在进行 Windows 文件搜索时,如何忽略文件名的前 x 个字符? 我正在尝试查找名称包含特定单词的所有文件,但要注意的是,我不想在每个文件名的前 10 个字母中列出包含搜索短语的文件。

我该怎么做?有什么工具可以让我做到这一点? 我发现了以下工具 GREPWIN: https://code.google.com/p/grepwin,它允许使用 REGEX 进行文件搜索,但我不确定如何使用 REGEX 忽略前 10 个字母。

示例:

搜索词:test

文件:

搜索结果:

BLAHBLAHBLtest.TXT

简单地消耗(或要求)至少有十个字符必须在测试的措辞之前:

.{10}test

此正则表达式有效,因为如果没有 10 个字符然后是 test,则不会发生匹配。

在网上做了一些研究后,我按照 REGEX 计算出忽略前 10 个字母: (?<=.{10})测试 您可以在我的演示中看到它在运行:regex101.com/r/nD1uP1/1 我在 Windows 上使用 PowerGREP (http://www.powergrep.com/) 工具和上面的正则表达式搜索查询并且它有效。

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%a IN ('dir /s/b/a-d "%sourcedir%\*test*.*" ') DO (
 SETLOCAL ENABLEDELAYEDEXPANSION
 SET "n10=%%~na"
 SET "n10=!n10:~0,10!"
 SET "n10a=!n10:test=!"
 IF /i "!n10a!" equ "!n10!" ECHO %%~a
 endlocal
)
GOTO :EOF

这是执行该任务的简单批处理作业。它不使用正则表达式。苏兹

dir/s/b 生成匹配文件名列表。这些由for命令一一处理如下:

select name 部分的前 10 个字符,然后将这 10 个字符中的任何字符串 test 替换为 nothing。如果结果是没有变化然后显示文件名。

当然,您可以将 test 全部替换为 %1,将 运行 替换为

这批测试

  • test 替换为 zorkpuffin 或其他任何内容。

您也可以将 10 替换为不同长度的参数-selection 或将目录名也作为参数,如果您愿意的话。


要在找到的文件中搜索,您可以替换

ECHO %%~a

(
 findstr "thingtosearchfor" "%%~a"
)

这会向您显示文件中包含目标字符串的行(但请参阅 findstr 文档以了解 find 部分如何工作的详细信息 - 您没有指明您想要的内容找到)

或与

(
 findstr "thingtosearchfor" "%%~a" >nul
 if not errorlevel 1 ECHO %%~a
)

如果要显示要查找的文本所在的文件名。

请注意,括号在第二种情况下很重要,因为它是一个多行命令,在第一种情况下是可选的