【问题标题】:How to ignore first x characters when doing a Windows file search? [closed]进行 Windows 文件搜索时如何忽略前 x 个字符? [关闭]
【发布时间】:2015-02-17 15:15:21
【问题描述】:

环境:Windows 2003 服务器

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

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

示例:

搜索词:测试

文件:

  • testtestteBLAH.TXT - 这个会被忽略

  • BLAHBLAHBLtest.TXT - 这个应该显示在搜索中

搜索结果:

BLAHBLAHBLtest.TXT

【问题讨论】:

标签: regex windows search wildcard


【解决方案1】:
@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 命令一一处理如下:

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

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

这批测试

  • 将test 替换为zork 或puffin 或其他任何内容。

如果您愿意,也可以将 10 替换为不同长度选择的参数,或者也可以将目录名称作为参数。


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

ECHO %%~a

与

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

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

或与

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

如果你想显示要找到的文本所在的文件名。

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

【讨论】:

  • 这确实是一个非常好的解决方案,因为它不需要任何第三方工具...我将其标记为已接受的答案。
  • Magoo,您能否也发布一个用于在文件内容中进行搜索的脚本?那么,不仅仅是文件名?
【解决方案2】:

只需消耗(或要求)在 test 的措辞之前至少有十个字符:

.{10}test

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

【讨论】:

  • 我已经测试过了,但是没有用。以下工作: (?regex101.com/r/nD1uP1/1
  • @jjj 你用的是哪个解析器?我使用了.Net的解析器。
  • 我什至没有看到 .Net 的选项,它适用于 PHP 和 Python,我在使用 PowerGREP 工具的搜索中成功使用了上面的正则表达式。
【解决方案3】:

在网上做了一些研究后,我已经按照 REGEX 来忽略前 10 个字母: (?http://www.powergrep.com/) 工具和上面的正则表达式搜索查询,它有效。

【讨论】:

    猜你喜欢
    • 2013-03-08
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2011-07-07
    • 2012-01-19
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多