Batch file 批处理findstr到特定深度的子文件夹

Batch file 批处理findstr到特定深度的子文件夹,batch-file,Batch File,我有以下代码用于在子目录中搜索2个exe文件: @echo off & setLocal EnableDELAYedeXpansion for %%d in (c) do if exist %%d: ( for /f "delims=" %%a in ('dir/b/s/x %%d:\autolog.exe %%d:\autorun.exe 2^>nul ^| findstr /V /C:".*\.*\.*\.*\.*\.*\.*\.*\.*" /C:".*\.*\.*\.*\.*

我有以下代码用于在子目录中搜索2个exe文件:

@echo off & setLocal EnableDELAYedeXpansion
for %%d in (c) do if exist %%d: (
for /f "delims=" %%a in ('dir/b/s/x %%d:\autolog.exe %%d:\autorun.exe 2^>nul ^| findstr /V /C:".*\.*\.*\.*\.*\.*\.*\.*\.*" /C:".*\.*\.*\.*\.*\.*\.*\.*" /C:".*\.*\.*\.*\.*\.*\.*" /C:".*\.*\.*\.*\.*\.*" /C:".*\.*\.*\.*\*"') do (
set var=%%a;!var!
))
echo %1,!var!, >>C:\test.txt
exit
虽然它可以搜索所有子文件夹(通过使用/s),但我只希望在4子文件夹级别内返回结果(例如,c:\sf1\sf2\sf3\autorun.exe应该是有效的结果,而c:\sf1\sf2\sf3\sf4\autorun.exe和树下的任何查找都应该是退出的,不会作为结果返回)

我使用所有通配符组合(*|.|*)和“\V”试图实现它,但失败了。为什么它不能工作,或者如果有其他更聪明的方法来做呢


提前感谢

以下是一个示例,使用findstr术语中的正则表达式将其限制为第四个文件夹级别:

@echo off
for /f "delims=" %%a in ('dir /ad /b /s ^| findstr \\.*\\.*\\.*\\ ^| findstr /v \\.*\\.*\\.*\\.*\\') do echo %%a
pause

下面是一个示例,使用findstr术语中的正则表达式将其限制为第四个文件夹级别:

@echo off
for /f "delims=" %%a in ('dir /ad /b /s ^| findstr \\.*\\.*\\.*\\ ^| findstr /v \\.*\\.*\\.*\\.*\\') do echo %%a
pause
我被这个答案所鼓舞。从Vista开始提供,它是一个功能强大的实用程序,其功能不仅仅是复制文件。
e、 g.
/L
开关防止复制;而
/LEV
只允许复制根目录的前N个级别,这样就消除了一个
FINDSTR

打高尔夫球
@echo关闭
SETLOCAL EnableDelayedExpansion
对于/F“令牌=*”%%F in('
ROBOCOPY“C:\.”“C:\.”autolog.exe autorun.exe/S/LEV:4/IS/L/NS/NC/NDL/NJH/NJS^ FINDSTR\\\.\\\.\\\\\\\\\\\\\\\*\\
“)设置“var=%%~fF;!var!”
回显%1,!变量!,>>C:\test.txt

格式化
@echo关闭
===SETLOCAL EnableDelayedExpansion EnableExtensions
设置“列表=”
设置^“FORCMD=^
%__APPDIR\\%ROBOCOPY.EXE C:\.C:\.autolog.EXE autorun.EXE^
/S%=非空子目录=%^
/级别:4%=最多4个级别=%^
/IS%=包含相同的文件=%^
/L%=仅列表(不复制)=%^
/NS%=无大小=%^
/NC%=无类=%^
/NDL%=无目录列表=%^
/NJH%=无作业头=%^
/NJS%=无作业摘要=%^
|%__APPDIR_uu%FINDSTR.EXE\\\\\\\\\\\\\\\%=MIN 4 LEVels=%“使用延迟扩展很方便
对于('!FORCMD!')中的/F“tokens=*”%%F,请设置“var=%~fF;!var!”
::由于奇怪的扩展规则
::如果未定义VAR,则将其设置为“~,-1”
如果定义了变量集“var=!var:~,-1!”则删除尾随;
>>“C:\test.txt”回显(%1,!var!,
我受answer的启发。自Vista开始提供,它是一个强大的实用程序,其功能不仅仅是复制文件。
e、 g.
/L
开关可防止其复制;而
/LEV
仅允许复制根目录的前N个级别,从而消除了一个
FINDSTR

打高尔夫球
@echo关闭
SETLOCAL EnableDelayedExpansion
对于/F“令牌=*”%%F in('
ROBOCOPY“C:\.”“C:\.”autolog.exe autorun.exe/S/LEV:4/IS/L/NS/NC/NDL/NJH/NJS^ FINDSTR\\\.\\\.\\\\\\\\\\\\\\\*\\
“)设置“var=%%~fF;!var!”
回显%1,!var!,>>C:\test.txt

格式化
@echo关闭
===SETLOCAL EnableDelayedExpansion EnableExtensions
设置“列表=”
设置^“FORCMD=^
%__APPDIR\\%ROBOCOPY.EXE C:\.C:\.autolog.EXE autorun.EXE^
/S%=非空子目录=%^
/级别:4%=最多4个级别=%^
/IS%=包含相同的文件=%^
/L%=仅列表(不复制)=%^
/NS%=无大小=%^
/NC%=无类=%^
/NDL%=无目录列表=%^
/NJH%=无作业头=%^
/NJS%=无作业摘要=%^
|%__APPDIR_uu%FINDSTR.EXE\\\\\\\\\\\\\\\%=MIN 4 LEVels=%“使用延迟扩展很方便
对于('!FORCMD!')中的/F“tokens=*”%%F,请设置“var=%~fF;!var!”
::由于奇怪的扩展规则
::如果未定义VAR,则将其设置为“~,-1”
如果定义了变量集“var=!var:~,-1!”则删除尾随;
>>“C:\test.txt”回显(%1,!var!,

谢谢,该代码只显示所有第四级目录,但实际上需要检查该目录中是否存在特定文件。我无法修改您的示例来执行此操作。很抱歉,如果听起来需要更新,我实际上创建了另一个findstr管道,它现在工作正常,谢谢。您也可以使用
dir“file.ext”/a-d/b/s
而不是
dir/ad/b/s
谢谢,代码只在显示所有第四级目录时工作,但它实际上需要检查该目录中是否存在特定文件。我无法修改您的示例来执行此操作。如果听起来需要更新,很抱歉,我实际上创建了另一个findstr管道,并且它可以在很好,谢谢。您也可以使用
dir“file.ext”/a-d/b/s
而不是
dir/ad/b/s