【问题标题】:Batch search a directory for multiple file names批量搜索目录中的多个文件名
【发布时间】:2016-07-12 15:43:53
【问题描述】:

我将首先介绍实际示例,以便您了解我在做什么。请注意,这是在我的工作计算机和网络上,所以我没有管理员权限。

我有一个项目列表 - 大约 1000 行,目前在 Excel 中。我对其进行了一些规范化,以删除引用这些项目的文件中可能包含或不包含的字符。我有权访问一个目录(通过 Windows 资源管理器或 Sharepoint),该目录包含可能与这些项目相关联的某些文档(如果我们有关于它们的任何信息)。该目录的组织结构如下:

  • 答:
    • \A
      • \犰狳
        • 犰狳.doc
      • \陆军
        • Army.doc
    • \B
      • \公牛
        • Bull.doc

我想运行某种批量搜索,以确定是否有文件或目录名称与一行文本匹配,然后对整个 1000 行执行此操作。

例如,假设我的文件有以下几行文本:

Armadillo
Army
Baby
Bull

并假设该目录包含与 Armadillo、Army 和 Bull 匹配的文件,但不匹配 Baby.. 我希望输出详细说明文件名和位置,例如:

Armadillo     A:\A\Armadillo\Armadillo.doc
Army          A:\A\Army\Army.doc
Baby
Bull          A:\B\Bull\Bull.doc
...and so on for every line.

我只想读取目标目录并报告匹配(或不匹配) - 不修改任何文件。我不需要查看实际文件,只需查看文件名。我也不想做任何可能改变文件系统的事情。我只是想自动化一个可能需要手动逐行执行的过程。

我确信有很多方法可以使用 Excel 中的宏、Notepad++ 中的文件中查找、grep 等来执行此操作。我花了很多时间寻找解决这个确切问题的方法,但所有的解决方案似乎正在尝试解决类似的问题,但并不准确。我希望有一种简单的方法可以做到这一点,而不会改变文件系统或造成大量负载。

【问题讨论】:

  • I've spent numerous hours looking for a solution 什么不起作用?

标签: excel batch-file filesystems notepad++


【解决方案1】:
for /f "delims=" %A in (filename.txt) do dir /s /b "c:\startingdir\%A" >> results.txt

请参阅 for /?dir /? 寻求帮助。 >> 表示追加到文件中。在批处理文件中,交互输入时使用%%A 而不是%A

& 允许多个命令。

for /f "delims=" %A in (filename.txt) do echo %A & dir /s /b "c:\startingdir\%A" >> results.txt

【讨论】:

  • 您需要在 DIR 文件掩码中添加一些通配符。
  • 不在此,因为文件有文件名。
  • 您的 DIR 将失败,因为 Armadillo 与 Armadillo.doc 不匹配。此外,您不会验证 Armadillo.doc 是否位于名为 Armadillo 的文件夹中。见my answer
  • 他有一个文件名。
  • 不,他没有。更仔细地阅读问题。他希望犰狳匹配犰狳\犰狳.doc
【解决方案2】:

除了对齐文件名之外,这一切都做了。有一些微妙的边缘情况可能会导致问题,例如“c:\startingdir\Armadillo\Armadillo.x\somefile”或“c:\sartingdir\Armadillo\Armadillo.x.txt”。但我怀疑这足以满足您的需求。

@echo off
for /f "useback eol=: delims=" %%D in ("file.txt") do (
  for /f "eol=: delims=" %%F in (
    'dir /b /a-d /s "c:\startingdir\%%D.??????????????" 2^>nul^|findstr /li "\\%%D\\%%D."'
  ) do echo %%D   %%F
) || echo %%D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多