将电影文件从我的外部驱动器复制到我的 NAS

copy movie files from my external drive to my NAS

我有一个批量将电影文件从我的外部驱动器复制到我的 NAS。
文件名如下所示:

识骨寻踪 S09E18 - 剧集名称

批次:

set FOLNAME="Bones\Recordings\"
set FILENAME="Bones "
@echo on
if exist %LPATH%%FILENAME%S09* (if not exist %NASPATH%%FOLNAME%"Season 9" mkdir %NASPATH%%FOLNAME%"Season 9")
copy /Y %LPATH%%FILENAME%S09* %NASPATH%%FOLNAME%"Season 9"

目前我需要为每个季节编写代码。
是否可以获取季节编号并将其用作代码中的变量?
set "FOLNAME=Bones\Recordings"
set "FILENAME=Bones"
@echo on
for /L %%b in (0,1,9) do for /L %%c in (0,1,9) do (
 if exist "%LPATH%\%FILENAME% S%%b%%c*" (
  if %%b == 0 (
   mkdir "%NASPATH%\%FOLNAME%\Season %%c" 2>nul
   copy /Y "%LPATH%\%FILENAME% S%%b%%c*" "%NASPATH%\%FOLNAME%\Season %%c"
  ) else (
   mkdir "%NASPATH%\%FOLNAME%\Season %%b%%c" 2>nul
   copy /Y "%LPATH%\%FILENAME% S%%b%%c*" "%NASPATH%\%FOLNAME%\Season %%b%%c"
  )
 )

提示:使用 set "var1=data" 设置值 - 这避免了由批处理文件中的尾随空格引起的问题。不要在目录名中包含终端 \ - 违反直觉,这样可以更轻松地构建路径。

简单地使用 for/L%%b 从 0 变为 9(好吧 - 可能 1 到 2 就足够了)和 %%c 类似地,并构造所需的名称,插入空格,根据需要使用反斜杠和引号。

2>nul 抑制错误消息(例如,目录已存在)。将 >nul 附加到 copy 命令将抑制报告副本的消息。请注意 2>nul,因为这是一条错误消息,请注意 >nul,因为这是一条正常消息。

在这里看看我是如何将标题与系列和剧集分开的。

@echo off
setlocal enabledelayedexpansion
for %%m in (*.mp4) do for %%i in (%%m) do for /f "tokens=1,*delims=SE-" %%a in ('echo %%i ^| findstr /R "S[0-9].E[0-9]."') do (
    set "File=%%m"
    set "remove=!File:*S%%aE%%b=!"
    call set "Title=%%File:!remove!=%%"
    echo File: "%%m" Movie Title: "!Title: S%%aE%%b=!" Season: "%%a" Episode: "%%b"
)

注意,我以 *.mp4 为例来遍历每个 mp4,仅用于演示目的。

这比必须手动指定文件夹名称更加动态。这纯粹是echo的结果来证明。