我希望使用批处理文件来搜索并显示位于不同位置的名为“错误”的文件夹中的文件。
错误文件夹始终位于相同的文件夹深度,但是其前面的文件夹名称不同。
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
find
Windows 具有 grep:和的内置替代品findstr
。
findstr
将支持正则表达式(您可以通过键入获取更多信息help findstr
),但您会受到输出的限制,因为输出dir
似乎不支持相对列表......
dir /A-d /S /B | findstr /B /R /I /X "C:\\Temp\\[^\\]*\\[^\\]*\\error\\.*"
答案4
dir /b /s *.*|grep "error\\[^\\]*$"
建议的安装方式是获取gnuwin32。
顺便说一句,如果你只是想看文本文件,它会是这样的:
dir /b /s *.txt|grep "error\\[^\\]*$"
如果你想确保只使用一定深度的文件夹,那么它会稍微复杂一些:
dir /b /s *.*|grep "^\([^\\]*\\\)\{7\}error\\[^\\]*$"
这将只显示错误目录深度为七个目录(从根目录开始)的结果。