递归搜索目录中的文件夹

时间:2017-01-08 23:24:15

标签: cmd

在给定目录中找到文件(不是文件夹)有简单的command,其工作原理如下:

where /r GroupManagementAppServer test.js 返回文件夹test.js中名为GroupManagementAppServer的所有文件。

但是,此命令因其他两个用例而失败:

  1. 用户指定相对于某个目录的路径名作为最后一个参数(例如,在第一个示例中,var/www/html/project/js/test.js,这是GroupManagementAppServer中的某个地方)
  2. 用户指定文件夹(如第一个示例中的js
  3. 作为最后一个参数

    我需要一些命令行逻辑来处理所有这些用例,这样我就可以完成我的逻辑来验证两个参数,这样我就可以完成我的例程,这个例程将作为我的“业务端”。码。 (我正在编写一个命令行脚本,为我项目中的代码文件生成markdown文件。我已经坚持了几天这个任务,现在是时候继续完成并完成一些真正的工作了。)

1 个答案:

答案 0 :(得分:0)

where命令只能搜索文件,但不能搜索目录;改为使用dir,可以搜索这两个文件(使用选项/A:-D)和目录(使用选项/A:D)。

用例1

dir /S可用于递归搜索与给定名称或模式匹配的项目,但不能用于搜索其相对路径与给定路径匹配的项目。但是,您可以使用findstr过滤dir /S的输出,如下所示:

rem // Define constants here:
set "RootDir=GroupManagementAppServer"
set "RelPath=var\www\html\project\js\test.js"

rem /* Let `dir` return all files in full tree, then let `findstr` filter for matches;
rem    each `\` needs to be doubled as `\` is used as escape character by `findstr`: */
dir /B /S /A:-D "%RootDir%\*" | findstr /I /E /C:"\\%RelPath:\=\\%"

用例2

实际上我不太清楚你的意思,但我想你希望用户能够只输入文件{{js)的直接父目录的名称或相对路径。 1}}。我不知道你想如何区分文件和目录,除非我们可以假设目录名不包含扩展名。

假设我的假设是正确的,并且用户输入不包含任何通配符(test.js?),您可以使用*循环来确定是否存在是一个扩展名:

for