如何在进行 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
文件:
testtestteBLAH.TXT - 这个会被忽略
BLAHBLAHBLtest.TXT - 这个应该在搜索中显示
搜索结果:
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
替换为 zork
或 puffin
或其他任何内容。
您也可以将 10
替换为不同长度的参数-selection 或将目录名也作为参数,如果您愿意的话。
要在找到的文件中搜索,您可以替换
ECHO %%~a
和
(
findstr "thingtosearchfor" "%%~a"
)
这会向您显示文件中包含目标字符串的行(但请参阅 findstr
文档以了解 find
部分如何工作的详细信息 - 您没有指明您想要的内容找到)
或与
(
findstr "thingtosearchfor" "%%~a" >nul
if not errorlevel 1 ECHO %%~a
)
如果要显示要查找的文本所在的文件名。
请注意,括号在第二种情况下很重要,因为它是一个多行命令,在第一种情况下是可选的
环境:Windows2003 服务器
问题: 在进行 Windows 文件搜索时,如何忽略文件名的前 x 个字符? 我正在尝试查找名称包含特定单词的所有文件,但要注意的是,我不想在每个文件名的前 10 个字母中列出包含搜索短语的文件。
我该怎么做?有什么工具可以让我做到这一点? 我发现了以下工具 GREPWIN: https://code.google.com/p/grepwin,它允许使用 REGEX 进行文件搜索,但我不确定如何使用 REGEX 忽略前 10 个字母。
示例:
搜索词:test
文件:
testtestteBLAH.TXT - 这个会被忽略
BLAHBLAHBLtest.TXT - 这个应该在搜索中显示
搜索结果:
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
替换为zork
或puffin
或其他任何内容。
您也可以将 10
替换为不同长度的参数-selection 或将目录名也作为参数,如果您愿意的话。
要在找到的文件中搜索,您可以替换
ECHO %%~a
和
(
findstr "thingtosearchfor" "%%~a"
)
这会向您显示文件中包含目标字符串的行(但请参阅 findstr
文档以了解 find
部分如何工作的详细信息 - 您没有指明您想要的内容找到)
或与
(
findstr "thingtosearchfor" "%%~a" >nul
if not errorlevel 1 ECHO %%~a
)
如果要显示要查找的文本所在的文件名。
请注意,括号在第二种情况下很重要,因为它是一个多行命令,在第一种情况下是可选的