it-swarm.com.ru

Пакетное создание папки на основе имени файла и перемещение нескольких связанных файлов в созданную папку

В течение многих лет я всегда складывал все свои фильмы в одну папку вместе со всеми их дополнениями…. Я понял, что теперь после нескольких разочарований сохранение резервной копии nfo и art сэкономит мне часы жизни и сохранит база данных более пригодна для использования при добавлении новой настройки Kodi (телевизор, планшет, ноутбук и т. д.) . Поэтому я пытаюсь создать пакетную папку на основе имени файла фильма и переместить несколько связанных файлов в созданная папка.

Чтобы было ясно, я хочу сделать имя папки фильма и сделать так, чтобы все связанные файлы помещались в эту папку. Формат имен файлов фильмов может измениться, потому что они не все имеют одну и ту же информацию, т. Е. Режиссерскую, неотредактированную, окончательную редакцию, которая находится в скобках []. Основное название фильма во всех случаях будет наименьшим именем файла, и я бы никогда не хотел, чтобы папка называлась именем файла, содержащего «[Extra]» в имени файла….. Вообще говоря, формат «Movie (year») ) [дополнительная информация] ... [дополнительная информация] маленькое описание здесь "для видеороликов, не связанных с кино.

Лучшее, что я придумал, это: 

for %%i in (*) do md "%%~ni" && move "%%~i" "%%~ni"

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

Пример того, что я пытаюсь сделать:

  • \ '71 [Extra] sup stuff.mp4
  • \ '71 .mkv
  • \ 3 Geezers! (2013) -fanart.jpg
  • \ 3 Geezers! (2013) -poster.jpg
  • \ 3 Geezers! (2013) .mp4
  • \ 3 Geezers! (2013) .nfo
  • \ 3 Женщины (1977) -fanart.jpg
  • \ 3 Женщины (1977) -poster.jpg
  • \ 3 Женщины (1977) .mp4
  • \ 3 Женщины (1977) .nfo
  • \ 12 лет рабства (2013) .mp4
  • \ 13 (2010) .mp4
  • \ A Case Of You (2013) .avi
  • \ A Single Shot (2013) .mp4
  • \ Abre Los Ojos (1997) [Открой глаза] [SPA] [Extra] Test.mp4
  • \ Abre Los Ojos (1997) [Открой глаза] [SPA] .avi
  • \ Abre Los Ojos (1997) [Открой свои глаза] [SPA] .srt
  • \ G.B.F. (2013) .mp4
  • \ G.I. Джо Возмездие (2013) .mkv
  • \ G.I. Джо Возмездие (2013) .srt
  • \ Тестовый фильм (1977) [Comm] .mp4

Для того, чтобы: 

  • \ '71\'71 [Extra] sup stuff.mp4
  • \ '71\'71 .mkv
  • \ 3 Geezers! (2013)\3 Geezers! (2013) -fanart.jpg
  • \ 3 Geezers! (2013)\3 Geezers! (2013) -poster.jpg
  • \ 3 Geezers! (2013)\3 Geezers! (2013) .mp4
  • \ 3 Geezers! (2013)\3 Geezers! (2013) .nfo
  • \ 3 женщины (1977)\3 женщины (1977) -fanart.jpg
  • \ 3 женщины (1977)\3 женщины (1977) -poster.jpg
  • \ 3 Женщины (1977)\3 Женщины (1977) .mp4
  • \ 3 Женщины (1977)\3 Женщины (1977) .nfo
  • \ 12 лет раба (2013)\12 лет раба (2013) .mp4
  • \ 13 (2010)\13 (2010) .mp4
  • \ A Case Of You (2013)\A Case Of You (2013) .avi
  • \ Один выстрел (2013)\Один выстрел (2013) .mp4
  • \ Abre Los Ojos (1997) [Открой свои глаза] [SPA]\Abre Los Ojos (1997) [Открой свои глаза] [SPA] [Extra] Test.mp4
  • \ Abre Los Ojos (1997) [Открой свои глаза] [SPA]\Abre Los Ojos (1997) [Открой свои глаза] [SPA] .avi
  • \ Abre Los Ojos (1997) [Открой свои глаза] [SPA]\Abre Los Ojos (1997) [Открой свои глаза] [SPA] .srt
  • \ G.B.F. (2013)\G.B.F. (2013) .mp4
  • \ G.I. Возмездие Джо (2013)\G.I. Джо Возмездие (2013) .mkv
  • \ G.I. Возмездие Джо (2013)\G.I. Джо Возмездие (2013) .srt
  • \ Тестовый фильм (1977) [Comm]\Тестовый фильм (1977) [Comm] .mp4

Может ли кто-нибудь помочь мне с этим кодом партии? Не все файлы имеют названия Movie (Year) [Comm] ..., некоторые просто Movie или Movie [Comm].

Итак, я хочу создать папку на основе фильма, то есть любого файла с определенным расширением видео, такого как mp4, mkv, avi и т.д., Который также не содержит: [Extra]; затем переместите все связанные файлы в эту папку.

Я прошел через эти источники:

  1. Пакетное создание папок на основе части имени файла и перемещение файлов в эту папку
  2. Пакетно созданная папка по имени файла и перемещению
  3. Пакетное создание папок на основе серии файлов и перемещение в подкаталог
  4. Пакетный скрипт для создания папок на основе имен файлов
  5. создавать папки на основе имени файла и перемещать эти файлы в эту папку
  6. https://superuser.com/questions/762113/cmd-command-to-create-folder-for-each-file-and-move-file-into-folder
  7. Пакетный скрипт, который перемещает каждый файл в папке в свои собственные папки с именем файла?
  8. Пакетная команда перемещения файлов PNG в папки с одинаковыми именами файлов и папок
  9. Пакетная команда, чтобы проверить частичное имя файла, затем переместить
  10. Индекс A-Z командной строки Windows CMD: http://ss64.com/nt/
9
ByteShare

Хотя ваше описание достаточно, вы забыли дать некоторые конкретные детали; например: запускает все имена файлов с частью "Movie (year)"? Если так, то этот пакетный файл делает то, что вы хотите:

EDIT: Ops, я неправильно прочитал требования! Эта версия работает правильно:

@echo off
setlocal

set "basename=."
for /F "tokens=1* delims=." %%a in ('dir /B /A-D ^| sort /R') do (
   set "filename=%%a"
   setlocal EnableDelayedExpansion
   for /F "delims=" %%c in ("!basename!") do if "!filename:%%c=!" equ "!filename!" (
      set "basename=!filename!"
      md "!basename!"
   )
   move "!filename!.%%b" "!basename!"
   for /F "delims=" %%c in ("!basename!") do (
      endlocal
      set "basename=%%c
   )
)
8
Aacini

Просто сохраните приведенный ниже код с расширением .Bat в текущем исходном местоположении, и все будет в порядке.

@echo off
for %%a in (*.*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)
pause

2
Vinoth

Это не легко сделать, потому что вам придется сортировать имена файлов. Вы можете указать порядок сортировки, используя dir, но сначала у него не будет самых коротких имен. Например, foo.wmv в алфавитном порядке отстает от foo subtitles.srt, потому что пробел стоит перед точкой.

Таким образом, в качестве обходного пути, возможно, вы могли бы иметь список «известных расширений», которые содержат основные названия фильмов, а затем переместить все файлы, которые имеют базовое имя с ними. Следующий скрипт делает именно это. В нем перечислены все файлы с расширениями avi, mp4 и mkv, но, возможно, вам придется начинать с nfo, который может быть доступен для многих фильмов. Сценарий использует имена файлов этих файлов для создания каталогов и поиска связанных файлов. Кажется, это помогает, но, пожалуйста, сделайте резервную копию, прежде чем использовать его. :)

В этом сценарии предполагается, что файл с известным расширением также имеет самое короткое имя. Если есть другие файлы с более короткими именами (или иначе не совпадающие), они не будут перемещены в эту папку.

Сценарий не идеален. Самым большим недостатком является то, что если один фильм содержит несколько файлов mp4, он создаст папку для каждого из них. Но если вы сделаете пару итераций, каждый раз используя разные расширения в определенном порядке (начните с nfo и других аналогичных расширений, затем перейдите к двоичным расширениям фильма и т.д.), Вы можете сделать хотя бы большинство из работы автоматически.

@echo off
setlocal

REM store current directory. Using separate variable makes it 
REM easier to change behaviour too.
set dir=%cd%

REM call subroutine for each supported extension.
call :do .info
call :do .mp4
call :do .avi
call :do .mkv

REM Main program done.
echo Press a key to close.
pause
exit /b

:do
set ext=%1
REM loop through all files with the given extension.
for /f "tokens=*" %%f in ('dir /b /on "%dir%\*%ext%"') do (
  REM trim the extension and use the base name as directory name.
  setlocal EnableDelayedExpansion
  set thefile=%%~nf
  echo !thefile!
  md "%dir%\!thefile!"
  REM move all files that start with the same base name.
  move "%dir%\!thefile!*.*" "%dir%\!thefile!\"
)
REM exit subroutine
exit /b
1
GolezTrol

Я думаю, что это будет работать, но сначала попробуйте на тестовой папке:

@echo off
for %%a in (*.*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)
cd ..
del %%~na
pause

Правка: я изменил код, смешанный синтаксис batch и bash.

0
Keethesh