Пакетное создание файлов / папок - PullRequest
0 голосов
/ 16 января 2012

У меня много фильмов в разных жанровых папках. Что я хочу сделать с помощью командного файла, так это создать папку для каждого фильма в той же папке жанра, где находится фильм. Например:

/Movies/SciFi/
/Movies/SciFi/the matrix.avi
/Movies/SciFi/the matrix reloaded.mkv
/Movies/Comedy/
/Movies/Comedy/borat.avi
/Movies/Comedy/dinner for schmucks.avi

В основном я хочу запустить пакетный файл из родительской папки Movies, отсканировать все * .mkv * .avi * .mp4 файлы в папках жанра и создать папки на основе названий фильмов. Название папки должно быть:

.(moviename without extension).backdrop

Конечно, папка не должна создаваться, если она уже существует. Это то, что я до сих пор:

for /f %%f in ('dir *.avi *.mkv *.mp4 /b') do md .%%~nf.backdrop

Однако у этого есть некоторые недостатки: мне нужно запускать его из каждой папки жанра, и если в имени файла есть пробел, эта команда будет перехватывать все до пробела, что делает команду aboce практически бесполезной.

Надеюсь, вы, ребята, сможете мне помочь.

Ответы [ 2 ]

1 голос
/ 16 января 2012

Нет необходимости в параметре / r, если вы не хотите обходить иерархию.Кроме того, простой оператор if может избежать попыток создать уже существующую папку

for /D %%D in (\Movies\*) do for %%F in ("%%~D\*.avi" "%%~D\*.mkv" "%%~D\*.mp4") do (
  if not exist "%%~D\%%~nF.backdrop" md "%%~D\%%~nF.backdrop"
)
1 голос
/ 16 января 2012

Кавычки будут обрабатывать пробелы;

@echo off
for /r "c:\movies\" %%d in (.) do (
    pushd %%d
    echo now in %%d
    for %%f in (*.avi *.mkv *.mp4) do (
        md "%%~nf.backdrop"
    )
    popd 
)

Это должно создать SOMEMOVIE.backdrop в Category\SOMEMOVE\ dir.

Если вы хотите, чтобы они были в корне, просто md "..\%%~nf.backdrop"

(Предполагается, что в каталоге dir нет других подкаталогов, так как он рекурсивный, поэтому их можно включить)

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