【问题标题】:A .bat or .wsh script that can search for files可以搜索文件的 .bat 或 .wsh 脚本
【发布时间】:2010-09-29 16:57:34
【问题描述】:

我正在寻找可以执行以下操作的 .bat 或 .wsh 脚本的一些示例:

  • 递归读取具有用户提供的扩展名(.dll、.exe 等)的目录中的文件名
  • 在用户提供的目录中搜索上述文件名
  • 生成结果的 txt 或 xls 报告,例如:在“C:\temp”、“C:\blah”中找到 x.txt

TIA。

编辑:

糟糕,我要澄清一下:这里有两个目录和两个搜索。

搜索 1:

  • 在用户提供的目录“Dir 1”中搜索所有 *.dll。

搜索 2:

  • 在不同的用户提供的目录“Dir 2”中搜索在搜索 1 中生成的文件名。此搜索也需要递归。

因此,如果搜索 1 在目录 1 中找到 foo.dll、foo2.dll 和 foo3.dll,则搜索 2 应在目录 2 中查找 foo.dll、foo2.dll 和 foo3.dll,并提供报告(简单列出)每个找到的文件。

【问题讨论】:

    标签: batch-file scripting wsh


    【解决方案1】:

    为什么不使用目录?

    在当前目录和所有子目录中搜索 dll

    dir /S *.dll
    

    在所有 C 中搜索 dll

    dir /S C:\*.dll
    

    保存报告

    dir /S C:\*.dll > report.txt
    

    【讨论】:

    • 查看我的后续回答,它澄清了问题。
    • 啊,非常感谢!我什至没有想到 dir 会这样做!另外,您可以使用dir /B /S "myPath""*myString*"
    【解决方案2】:

    我会研究 Robocopy 看看这是否有帮助(/L 标志是一个线索)。

    【讨论】:

      【解决方案3】:

      将以下内容放入 .bat 文件中,例如 FindAll.bat

      @echo OFF
      
      for /f %%F in ('dir %2\%1 /s /b') do (
          <nul (set /p msg=%%~nxF )
          for /f %%G in ('dir %3\%%~nxF /s /b') do (
              if exist %%G (
                  @echo found at %%G
              ) 
          )
      )
      

      %1 是用户提供的文件掩码。

      %2 是用户提供的首先搜索的目录。

      %3 是用户提供的第二个搜索目录。

      从命令行调用生成报告:

      FindAll *.dll d:\dir1 d:\dir2 > dll_report.txt 2>&1
      

      &lt;nul (set /p) 技巧将在没有新行的情况下将文本输出到控制台(感谢 Pax 来自该线程:How to code a spinner for waiting processes in a Batch file?

      需要在调用批处理文件时添加2&gt;&amp;1 才能将所有输出捕获到文件中(来自此线程的aphoriaUnderused features of Windows batch files

      【讨论】:

      • 这让我们很接近;需要在第一行添加 /s。我们真正需要的是一种从 %%f; 中的文件名中剥离目录的方法;现在它正在从 dir2 中的 dir1 中寻找完整的文件名。此外,在 dir2 (%%3) 中的搜索也需要递归。
      • 太好了,感谢您回来修改此内容,以及展示如何使用 &1。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2012-04-28
      相关资源
      最近更新 更多