Windows批处理文件,用于列出其中包含特定文件的文件夹

时间:2010-04-23 17:09:58

标签: windows command-line cmd

我正在尝试创建一个文件,其中包含具有特定文件名的目录列表。

假设我正在尝试查找其中包含名为*.joe的文件的目录。我最初只尝试了一个简单的dir /ad *.joe > dir_list.txt,但它搜索*.joe的目录名称,所以没有去。

然后我得出结论,for循环可能是我最好的选择。我从

开始
for /d /r %a in ('dir *.joe /b') do @echo %a >> dir_list.txt

看起来它没有执行dir命令。我添加了“usebackq”,但这似乎只适用于/ F命令扩展。

想法?

4 个答案:

答案 0 :(得分:4)

由于“dir /s /b file_name”没有削减它,以下

怎么样
for /d /r %a in (*) do  @if exist %a\*.scr (echo %a)

在批处理文件中,唯一需要考虑的是%a give

for /d /r %%a in (*) do  @if exist %%a\*.scr (echo %%a)

答案 1 :(得分:1)

将此保存到search.bat或(您还能记住的其他内容)

@echo off
setlocal EnableDelayedExpansion
set last=?

if "%1" EQU "" goto usage

for /f %%I in ('dir /s /b /o:n /a-d "%1"') do (
  if !last! NEQ %%~dpI ( 
    set last=%%~dpI
    echo !last!
  )
)
goto end

:usage
echo Please give search parameter.

:end

并使用如下:

search.bat *.joe >dir_list.txt

请注意,它会在当前路径上下文中进行搜索。您可能希望将.bat添加到PATH中的位置,以便您可以从任何位置进行调用。

答案 2 :(得分:1)

这将打印目录和文件名,可能对您有帮助,也可能没有帮助:

dir /b /s | findstr "\.joe"

findstr使用正则表达式。

答案 3 :(得分:0)

dir /s/b *.joe >> dir_list.txt然后在例如gawk在dirnames之后摆脱文件名