批量列出目录

时间:2018-11-07 11:16:10

标签: windows powershell batch-file recursion

我有多个文件夹,其内部结构如下:

aaa
    000
        important
            v001
            v002
            v003
        not_important
            something_else
    001
        important
            v001
            v002
            v003
        not_important
            something_else
    002
        important
            v001
            v002
            v003
        not_important
            something_else
bbb
    000
        important
            v001
            v002
            v003
        not_important
            something_else
    001
        important
            v003
        not_important
            something_else
    002
        important
            v001
            v002
            v003
        not_important
            something_else
ccc
    000
        important
            v001
            v002
            v003
        not_important
            something_else
    001
        important
            v001
            v002
            v003
            v004
            v005
        not_important
            something_else
    002
        important
            v001
            v002
            v003
        not_important
            something_else

其中一个文件夹称为v00?,其中包含文件的特定版本。 现在,我要列出最新文件的所有日期。

但是,这是我的问题:

  • 我假设我不能使用递归函数,因为我有一些无关的文件夹(在上面的示例中不是not_important)
  • 我只想要最新的版本
  • 版本并非总是以一个开头,也不受数字限制
  • 文件夹名称不是简单的aaa,bbb,000,结构,并且不能按名称循环,也不能重复(文件夹1和Folder2不相同,只是它们进入的文件夹/层数) -我还需要遍历外部文件夹。

如何仅过滤掉这些文件夹的最新版本?

我尝试了这个,但是我无法使用该功能获得多层 而“ dir”命令给了我一切

"FOR /D %%d IN (*.*) DO ("

我该如何解决?

我当前的代码如下>

@echo off

setlocal 

for /D %%d in (*.*) do (
    echo %%d
    cd %%d

        for /D %%e in (*.*) do (
        echo %%e
        cd %%e
                for /D %%f in (*.*) do (
                    cd %%f
                    echo %%f



                    Insert Here CD ??



                    for /f "tokens=*" %%1 in ('dir /b /ad /on v*') do (
                        set latestdir=%%1
                    )

                    echo Latest directory name=%latestdir%

                        cd %latestdir%\fullres
                            pause
                        cd..


                )
        cd..
        )
    cd ..

)
pause

1 个答案:

答案 0 :(得分:1)

@echo off
setlocal enabledelayedexpansion

for /r /d %%A in (\v00*) do (
    pushd "%%~A\.."
    for /d %%B in (v00*) do set "subfolder=%%~B"
    if not "!save!" == "!cd!" echo !cd!\!subfolder!
    set "save=!cd!"
    popd
)

这遍历当前目录中的所有目录 目录,并搜索\v00*的匹配项。它会 pushd放入找到的每个匹配目录父目录中, 然后嵌套的for循环会搜索最后一个匹配项 v00*的子文件夹。如果已保存当前目录当前目录不匹配,则匹配 目录路径将被回显。 当前目录 将被保存用于下一个循环,popd将返回 到初始目录。