试图找出一种从下载文件夹中分类电视节目的有效方法。一世 知道这远不是最好的解决方案,但它在我的舒适区内:)
无论如何,我希望批处理文件搜索文件名并将其移动到正确的文件夹
我的电视节目文件夹结构是电视>显示名称>季节>文件
因此,例如,如果我有一个名为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>
非常感谢任何想法或帮助!
由于
答案 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!"
)