批处理文件使用特殊字符移动电视节目?

时间:2014-05-09 17:23:27

标签: batch-file

试图找出一种从下载文件夹中分类电视节目的有效方法。一世 知道这远不是最好的解决方案,但它在我的舒适区内:)

无论如何,我希望批处理文件搜索文件名并将其移动到正确的文件夹

我的电视节目文件夹结构是电视>显示名称>季节>文件

因此,例如,如果我有一个名为Archer.S01E01.mkv的文件,我希望它转移到电视> Archer>第1季等我已经创建了几个变量%source%和%dest%来减少所需的空间量,如下所示:

::Show: Archer

move %source%*archer*S01* %dest%archer\"season 1"\

move %source%*archer*S02* %dest%archer\"season 2"\

move %source%*archer*S03* %dest%archer\"season 3"\

move %source%*archer*S04* %dest%archer\"season 4"\

move %source%*archer*S05* %dest%archer\"season 5"\

move %source%*archer*S06* %dest%archer\"season 6"\

Is there a way to use an array to move the files to the correct folders? Something along the lines of:

move %source%*archer*S0[1-6]* %dest%archer\"season [1-6]"\  ?

我知道特定的例子不会起作用,我猜我是否需要某种循环?但对于我的生活,我不知道如何做到这一点。

如果循环将遍历文件并将字符串的一部分与节目匹配,那将更好,所以我不必为我的库中的每个电视节目创建一个命令。 / p>

非常感谢任何想法或帮助!

由于

2 个答案:

答案 0 :(得分:1)

假设所有文件共享“[ShowName] .S [SeasonNumber] E [EpisodeNumber] .mkv”的相同模板,则以下内容应根据需要创建所有文件夹,然后移动文件。请注意 - 这是未经测试的。

@echo off
set "source=yourSourceFolder"
set "dest=yourDestinationFolder"
pushd "%source%"
for /f "delims=" %%F in (
  'dir /b /a-d *.mkv ^| findstr /rix "[^.]*\.s[0-9]*e[0-9]*\.mkv"'
) do for /f "tokens=1,2 delims=." %%A in ("%%F") do (
  for /f "delims=SsEe0" %%S in ("%%B") do (
    if not exist "%dest%\%%A\season %%S\" md "%dest%\%%A\season %%S\"
    move "%%F" "%dest%\%%A\season %%S\" >nul
  )
)

答案 1 :(得分:0)

另一种方式(代替季节,它只会在以SHOWNAME命名的目录中创建子目录SO1,SO2,... SO9(在您的示例中为Archer):

@echo off
SET "SOURCE=YOUR\SOURCE PATH"
SET "DEST=YOUR\DESTINATION PATH"

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "TOKENS=1,2* DELIMS=." %%A IN ('DIR  /B/A-D "%SOURCE%\*.MKV"') DO (
SET $DEST=%%B
SET $DEST=!$DEST:~0,3!
IF NOT EXIST "%DEST%\%%A" MD "%DEST%\%%A"
IF NOT EXIST "%DEST%\%%A\!$DEST!" MD "%DEST%\%%A\!$DEST!"
MOVE "%SOURCE%\%%A.%%B.%%C" "%DEST%\%%A\!$DEST!"
)