Как получить имя каталога для каждого файла с определенным расширением файла в дереве каталогов? - PullRequest
1 голос
/ 12 октября 2019

Мне нужно получить имя каталога для каждого файла с расширением * .txt в указанной папке / каталоге (включая его подпапки / подкаталоги) .

Я пробовалрешение здесь: Родительская папка с полным путем

Но похоже, что set "myPath=%%~Pa" ничего не делает в приведенном ниже коде:

@echo off

cd /d "F:\Game\"
for /r %%f in (*.txt) do (
    echo file: %%f
    set "myPath=%%~Pa"
    echo myPath: %myPath%
    for %%a in ("%myPath:~0,-1%") do (
        set "myParent=%%~Na"
        echo %myParent%
    )
)
pause.

Для этихfiles:

F:\Game\file1.txt
F:\Game\first_subfolder\file2.txt
F:\Game\first_subfolder\hellothere\file3.txt
F:\Game\first_subfolder\hellothere\lala\file4.txt

Я ожидаю получить имя каталога для каждого из них:

Game
first_subfolder
hellothere
lala

Как получить имя каталога для каждого текстового файла в дереве каталогов?

1 Ответ

1 голос
/ 12 октября 2019

Я предлагаю сначала открыть окно командной строки , запустить set /? и прочитать справку по выводу от верхней части первой страницы до нижней части последней страницы, особенно раздел о задержке расширения переменной среды. См. Также: Переменные не работают должным образом .

Но можно получить имя каталога для каждого файла * .txt в дереве каталогов без использования отложенное расширение .

@echo off
for /R %%I in (*.txt) do for %%J in ("%%~dpI.") do (
    echo Text file: %%I
    echo Directory: %%~nxJ
)

Примечание: %%~nxJ - пустая строка, если этот пакетный файл выполняется из корня диска и в корне этого диска есть файл * .txt.

Хитрость в том, что %%~dpI расширяется до полного пути текущего текстового файла, заканчивающегося обратной косой чертой. . присоединяется к этой строке пути для ссылки на папку. Затем %%~nxJ расширяется до имени папки без пути. См. Также статью Microsoft о именовании файлов, путей и пространств имен .

...