Список каталогов в пакетном режиме - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть несколько папок с такой структурой внутри:

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 и не могут быть зациклены по имени, а также не обязательно повторяются (Folder1 и 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 голосов
/ 07 ноября 2018
@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 вернется в исходный каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...