批量创建基于文件名的文件夹,并将多个相关文件移动到创建的文件夹

Byt*_*are 10 windows cmd batch-file

多年来我一直把所有的电影都放到一个文件夹里,还有他们所有的额外内容.我已经意识到,经过几次挫折后,保持nfo和艺术的备份可以节省我的生命,并在添加新的Kodi设置(电视,平板电脑,笔记本电脑等等)时保持数据库更加可用.所以我试图根据电影的文件名批量创建一个文件夹,并将多个相关文件移动到创建的文件夹中.

为了清楚起见,我想制作电影的文件夹名称,并让所有相关文件进入该文件夹.电影文件名的格式可以改变,因为它们并不都具有相同的信息,即Director's cut,unedit,终极版,它们都在bralas []中.在所有情况下,主电影名称都是最小的文件名,我永远不希望文件夹以文件名中包含"[Extra]"的文件命名.一般来说,格式是"电影(年份)[额外信息] ... [额外信息]这里的小描述"非电影视频.

我提出的最好的是:

for %%i in (*) do md "%%~ni" && move "%%~i" "%%~ni"
Run Code Online (Sandbox Code Playgroud)

现在的问题是我正在为每个文件创建一个文件夹,并将所有文件移动到相应的文件夹,但相关内容现在位于不同的文件夹中,具有完全相同文件名的内容将保留在主文件夹中.

我想要完成的一个例子:

  • \'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
  • \你的案例(2013).avi
  • 单拍(2013).mp4
  • \ Abre Los Ojos(1997)[Open Your Eyes] [SPA] [Extra] Test.mp4
  • \ Abre Los Ojos(1997)[Open Your Eyes] [SPA] .avi
  • \ Abre Los Ojos(1997)[Open Your Eyes] [SPA] .srt
  • \ GBF(2013).mp4
  • \ GI Joe Retaliation(2013).mkv
  • \ GI Joe Retaliation(2013).srt
  • \ Test Movie(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
  • \你的案例(2013)\你的案例(2013).avi
  • 单拍(2013)\单拍(2013).mp4
  • \ Abre Los Ojos(1997)[Open Your Eyes] [SPA]\Abre Los Ojos(1997)[Open Your Eyes] [SPA] [Extra] Test.mp4
  • \ Abre Los Ojos(1997)[Open Your Eyes] [SPA]\Abre Los Ojos(1997)[Open Your Eyes] [SPA] .avi
  • \ Abre Los Ojos(1997)[Open Your Eyes] [SPA]\Abre Los Ojos(1997)[Open Your Eyes] [SPA] .srt
  • \ GBF(2013)\ GBF(2013).mp4
  • \ GI Joe Retaliation(2013)\ GI Joe Retaliation(2013).mkv
  • \ GI Joe Retaliation(2013)\ GI Joe Retaliation(2013).srt
  • \ Test Movie(1977)[Comm]\Test Movie(1977)[Comm] .mp4

任何人都可以帮我处理这批代码吗?并非所有文件名都是电影(年份)[Comm] ...,有些只是电影或电影[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. Windows CMD命令行的AZ索引:http://ss64.com/nt/

Aac*_*ini 8

虽然您的描述充足,但您忘了提供一些具体细节; 例如:使用"电影(年)"部分启动所有文件名?如果是这样,那么这个批处理文件可以做你想要的:

编辑: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
   )
)
Run Code Online (Sandbox Code Playgroud)


小智 5

只需将以下带有 .Bat 扩展名的代码保存在实际源位置即可。

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


Gol*_*rol 1

做到这一点并不容易,因为您必须对文件名进行排序。您可以使用 指定排序顺序dir,但它不会首先使用最短的名称。例如foo.wmv,按字母顺序位于 后面foo subtitles.srt,因为空格位于点之前。

因此,作为一种解决方法,也许您可​​以拥有一个包含基本电影名称的“已知扩展名”列表,然后移动与它们共享基本名称的所有文件。下面的脚本就是这样做的。它列出了所有带有avimp4mkv扩展名的文件,但也许您必须以 开头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
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

32582 次

最近记录:

6 年 前