批处理文件中特定文件夹深度的 dir 文件夹

批处理文件中特定文件夹深度的 dir 文件夹

我希望使用批处理文件来搜索并显示位于不同位置的名为“错误”的文件夹中的文件。

错误文件夹始终位于相同的文件夹深度,但是其前面的文件夹名称不同。

dir /A-d /b C:\Temp\*random_folder_name*\*random_folder_name*\error

那么,我可以创建一行来显示所有错误文件夹中的所有文件,“下面”有两个文件夹,在此示例中为“C:\Temp”吗?还是我必须为每个错误文件夹添加一个目录行?

答案1

Windows 7 及更高版本具有 power shell:

你可以试试:

Get-ChildItem \*\*\*

这将返回所有深度为两个子文件夹的项目。添加 * 会添加一个额外的子文件夹进行搜索。

来源:https://stackoverflow.com/questions/13249085/limit-get-childitem-recursion-depth

答案2

这是一个相对简单但效率低下的解决方案,使用 FINDSTR 和正则表达式。我使用[\\]match 是\因为 Vista 上存在不一致。

@echo off
dir /b /s c:\temp\*|findstr /rix "c:[\\]temp[\\][^\\]*[\\][^\\]*[\\]error[\\][^\\]*"

这是一个更复杂但非常有效的解决方案,使用多个 FOR 语句。

@echo off
for /d %%A in (c:\temp\*) do for /d %%B in ("%%A\*") do for %%C in ("%%B\error\*") do echo %%C

答案3

findWindows 具有 grep:和的内置替代品findstr

findstr将支持正则表达式(您可以通过键入获取更多信息help findstr),但您会受到输出的限制,因为输出dir似乎不支持相对列表......

dir /A-d /S /B | findstr /B /R /I /X "C:\\Temp\\[^\\]*\\[^\\]*\\error\\.*"

答案4

您可以安装操作系统库和使用grep为了这:

dir /b /s *.*|grep "error\\[^\\]*$"

建议的安装方式是获取gnuwin32

顺便说一句,如果你只是想看文本文件,它会是这样的:

dir /b /s *.txt|grep "error\\[^\\]*$"

如果你想确保只使用一定深度的文件夹,那么它会稍微复杂一些:

dir /b /s *.*|grep "^\([^\\]*\\\)\{7\}error\\[^\\]*$"

这将只显示错误目录深度为七个目录(从根目录开始)的结果。

相关内容