Я предлагаю следующий пакетный файл для этой задачи:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /R "%UserProfile%\Desktop\Test Env\Videos on Server" %%I in (*.mp4) do (
for %%J in ("%%~dpI..\..") do (
for %%K in ("%%~dpI..") do (
for %%L in ("%%~dpI.") do (
echo %%~nxJ-%%~nxK-%%~nxL
)
)
)
)
endlocal
Конечно, можно использовать просто *
вместо *.mp4
для обработки всех файлов, найденных рекурсивно в %UserProfile%\Desktop\Test Env\Videos on Server
и егоподкаталоги.
Другое решение будет следующим:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /D %%I in ("%UserProfile%\Desktop\Test Env\Videos on Server\*") do (
for /D %%J in ("%%I\*") do (
for /D %%K in ("%%J\*") do (
echo %%~nxI-%%~nxJ-%%~nxK
)
)
)
endlocal
Какой подход лучше, зависит от того, что делать с файлами, найденными в подкаталогах %UserProfile%\Desktop\Test Env\Videos on Server
, т.е. какие команды используются вместокоманда echo
в самом внутреннем цикле for
. Первый код более или менее предполагает, что файлы * .mp4 найдены только на трех уровнях каталога ниже указанного родительского каталога.
Для понимания используемых команд и их работы откройте командную строку выполните следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
endlocal /?
for /?
setlocal /?
Примечание. Команды SETLOCAL и ENDLOCAL здесь не будут действительно необходимыми и могут быть опущены, так каксреда по умолчанию для выполнения пакетных файлов такая же, как определено в setlocal EnableExtensions DisableDelayedExpansion
.
См. также документацию Microsoft о Именования файлов, путей и пространств имен .