Cmd 递归搜索目录中的文件夹
在给定目录中查找文件(而不是文件夹)很简单,其工作原理如下:Cmd 递归搜索目录中的文件夹,cmd,Cmd,在给定目录中查找文件(而不是文件夹)很简单,其工作原理如下: where/r GroupManagementAppServer test.js 返回文件夹GroupManagementAppServer中名为test.js的所有文件 但是,该命令在其他两个用例中失败: 用户指定与某个目录相关的路径名作为最后一个参数(例如,在第一个示例中,var/www/html/project/js/test.js,它位于GroupManagementAppServer中) 用户指定一个文件夹作为最后一个参数(
where/r GroupManagementAppServer test.js
返回文件夹GroupManagementAppServer
中名为test.js
的所有文件
但是,该命令在其他两个用例中失败:
var/www/html/project/js/test.js
,它位于GroupManagementAppServer
中)js
)我需要一些命令行逻辑来处理所有这些用例,这样我就可以实现我的逻辑来验证两个参数,这样我就可以完成编写作为代码“业务端”的例程。(我正在编写一个命令行脚本,该脚本为我的项目中的代码文件生成降价文件。我在这项任务上已经坚持了好几天,现在是时候继续做一些真正的工作了。)where命令只能搜索文件,不能搜索目录;改用
dir
,它可以同时搜索文件(使用/A:-D
)和目录(使用/A:D
)
用例1
dir/S
可用于递归搜索与给定名称或模式匹配的项目,但不能用于搜索相对路径与给定路径匹配的项目。但是,您可以使用findstr
过滤dir/S
的输出,如下所示:
rem//在此处定义常量:
设置“RootDir=GroupManagementAppServer”
设置“RelPath=var\www\html\project\js\test.js”
rem/*让'dir'返回完整树中的所有文件,然后让'findstr'筛选匹配项;
rem每个“\”都需要加倍,因为“findstr”将“\”用作转义字符:*/
目录/B/S/A:-D“%RootDir%\*”| findstr/I/E/C:\\%RelPath:\=\\%
用例2
实际上,我不太清楚您的意思,但我想您希望用户能够只输入文件test.js
的直接父目录(如js
)的名称或相对路径。我不知道您想如何区分文件和目录,除非我们可以假设目录名不包含扩展名
假设我的假设是正确的,并且用户输入不包含任何通配符(?
,*
),您可以使用for
循环来确定是否存在扩展:
rem//假设变量'RelPath'保存用户输入:
对于“%RelPath%”中的%%I,请设置“EXT=%%~xI”
rem//检查是否缺少扩展名:
如果未定义EXT(
rem/*没有扩展,因此假设用户输入是一个目录;
因此,在这种情况下,让我们附加默认文件名'test.js'*/
设置“RelPath=%RelPath%\test.js”
)
rem//继续使用用例1中的'dir`/'findstr'方法。。。
如果用户指定要从中递归的目录和相对路径名,这意味着什么?相对路径名的根是否必须是第一个参数的子目录?或者相对路径名的存在是否意味着“不递归”?或者其他什么?例如,如果我想在GroupManagementAppServer
中查找路径为var/www/html/project/js/test.js的文件,该路径与GroupManagementAppServer
中的某个目录相关,我应该能够做到这一点并获得它的路径。为了问题的清晰性,我又添加了一些单词。where/r
不适用于文件夹dir/s/b
可以,但不幸的是,相对路径名不起作用。绕过此限制的一种方法是解析路径名的第一个文件夹,仅对该文件夹执行dir/s/b
,cd
(或pushd
),然后检查路径名的其余部分是否存在。如果没有人能想出更好的解决方案,这会很麻烦,但也是可能的。关于dir/B/S/a:-D“GroupManagementAppServer\test.js”| findstr/I/E/C:“\var\www\html\project\js\test.js”
,因此dir
递归返回根目录GroupManagementAppServer
中找到的所有文件test.js
,并使用findstr
过滤的列表匹配相对路径(您必须使用\
作为路径分隔符;还要注意前导的\
)?要对文件夹执行相同操作,请将/A:-D
更改为/A:D
。