Получить путь к каталогу 2 уровня и изменить формат (пакетный файл) - PullRequest
1 голос
/ 27 октября 2019

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

Если вы посмотрите на изображение ниже, вы можете увидетьпример файла в его каталоге

Пример

Здесь указан каталог C: \ Users \ Work \ Desktop \ Test Env \ Videos on Server \ 2016\ 02 \ 1st

Но мне нужно, чтобы он отображался как 2016-02-1st , который на 2 уровня выше и имеет dashes вместо slashes

Я использую приведенный ниже код, чтобы получить путь:

set p=%cd%
echo %p%
pause

Есть идеи о том, как изменить вывод?

Ответы [ 2 ]

2 голосов
/ 27 октября 2019

Я предлагаю следующий пакетный файл для этой задачи:

@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 о Именования файлов, путей и пространств имен .

2 голосов
/ 27 октября 2019

Если это всегда 6-е, 7-е и 8-е:

for /f "delims=\ tokens=7-9" %%a in ("%cd%") do echo %%a-%%b-%%c
...