我先介绍一下实际例子,这样你才能理解我在做什么。请注意这是在我的工作计算机和网络上,所以我没有管理员权限。
我有一个项目列表 - 大约1000行,目前在Excel中。我对它进行了规范化,以删除可能包含或不包含在引用这些项目的文件中的字符。我可以访问一个目录(通过Windows资源管理器或Sharepoint),该目录包含可能与这些项目相关联的某些文档(如果我们有任何相关信息)。该目录的组织如下:
我想运行某种批量搜索,以查明是否存在与文本行匹配的文件或目录名称,然后对整个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等。我花了很多时间寻找这个问题的解决方案,但所有的解决方案似乎是在尝试解决类似的问题,但并不准确。我希望有一种简单的方法可以在不改变文件系统或造成大量负载的情况下做到这一点。
答案 0 :(得分:0)
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
答案 1 :(得分:0)
除了对齐文件名外,它可以完成所有操作。有一些微妙的边缘情况可能会导致问题,例如" c:\ startingdir \ Armadillo \ Armadillo.x \ somefile",或" c:\ sartingdir \ Armadillo \ Armadillo.x.txt& #34 ;.但我怀疑这对你的需求来说已经足够了。
@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