创建从文件名torrent中提取年份的文件夹,然后重新排列其中的文件

时间:2016-09-05 17:15:14

标签: batch-file

我在目录

中有这个.torrent文件列表示例
Le Rane del Mare 1951.torrent
Left Behind - La Profezia 2014.torrent
Lo straordinario viaggio di T.S. Spivet.torrent
Maleficent 2014 [dvd rip].torrent
Mandingo (1975).torrent
Maurice - Versione Integrale 1987.torrent

我想要 .bat 。这个bat必须生成从文件名中提取年份的文件夹,如

1951
2014
1975
1987

然后我想在以前创建的文件夹中移动文件,如

Le Rane del Mare 1951 --> 1951
Left Behind - La Profezia 2014 --> 2014
Maleficent 2014 --> 2014
Mandingo 1975 --> 1975
Maurice - Versione Integrale 1987 --> 1987

我使用的是Win7

我使用此代码但我必须先创建文件夹列表。我想用批量创建,而不是手动

    @echo off
setlocal enabledelayedexpansion
pushd %1
for /F "USEBACKQ tokens=*" %%a in (`dir /b /a:-d`) do (
    set "_file=%%a"
    for /D %%b in (*) do (
        if NOT "x!_file:%%b=!" == "x!_file!" (
            move "%%a" "%%b"
        )
    )
)
popd

1 个答案:

答案 0 :(得分:4)

根据您最初提供的示例,这将完成:

@Echo Off
For %%a In (*19???.torrent *20???.torrent) Do Call :Sub "%%~a"
Exit/B
:Sub
Set "mfn=%~n1"
Set "lfc=%mfn:~-5%
Set "lfc=%lfc:(= %"
Set "lfc=%lfc:)= %"
Set "lfc=%lfc: =%"
If Not Exist "%lfc%\" MD %lfc%
Move %1 %lfc%

但是,您已将示例更改为包含年份后面的字符,此解决方案将不再适用于您。 遗憾的是,如果没有看到包含所有torrent文件的列表,脚本将无法识别四个数字,只有两个数字已知,并根据您的要求将它们全部移动。

替代解决方案:

@Echo Off
For /F "Tokens=*" %%a In (
    'Dir/B/A-D *.torrent^|Findstr/R "\<19[0-9][0-9]\> \<20[0-1][0-9]\>"') Do (
    For %%b In (%%~na) Do Call :Sub "%%a" "%%b")
Pause
Exit/B
:Sub
Set "mfn=%~2"
Set "mfn=%mfn:(=%"
If %mfn:)=% GEq 1900 (If %mfn:)=% Lss 2017 (If Not Exist "%mfn:)=%\" MD %mfn:)=%
        Move %1 %mfn:)=%))