在一个文件夹中有16.000个mp3文件。如何使用过滤器将它们放入文件夹?

时间:2014-07-19 19:02:14

标签: batch-file windows-7 cmd

在一个文件夹中有一堆mp3文件,我希望每个艺术家都拥有自己的文件夹。 我手动尝试过doind,但是在放弃之前我只能完成大约5000次。

我想要的是一个命令或脚本,让我按文件名中的字符串过滤,然后将其移动到文件夹中。

谢谢你!

PS:使用WIN7

1 个答案:

答案 0 :(得分:1)

此处理文件夹中文件名为" - "的所有MP3文件。

它会将名为"Angels - One Child.mp3"的文件移动到名为
的文件夹中 Angels并将MP3文件重命名为One Child.mp3

注1: AC - DC - Rock Me.mp3这样的文件名只会部分工作  因为该文件夹将变为AC,文件将被称为DC - Rock Me.mp3

注2:包含^%的文件名可能无法正确处理。

它要求您启动这样的批处理文件:moveMP3.bat !
使用!作为第一个参数,以便它不会在另一个文件夹中意外运行。

@echo off
if not %1.==!. echo Moves filenames aaa - bbb.*.mp3 to a folder named aaa and filename bbb.* - Syntax: "%~0" ! & pause & goto :EOF
:: Moves filenames aaa - bbb.* to a folder named aaa
setlocal
for /f "delims=" %%a in ('dir "* - *.mp3" /a:-d /b') do call :go "%%a"
pause
goto :EOF
:go
set "name=%~n1"
set "num=0"
set "found="
:loop
set /a num=num+1
call set "name2=%%name:~%num%,3%%"
if "%name2%"==" - " set /a found=%num%
if not defined found goto :loop
:: name2 is the aaa part
call set "name2=%%name:~0,%num%%%"
:: name1 is the bbb part
set /a num1=num+3
call set "name1=%%name:~%num1%%%"
md "%name2%" 2>nul
echo moving "%~1"
   move "%~1" "%name2%\" >nul
   ren "%name2%\%~1" "%name1%%~x1"
goto :EOF

这会将文件名中peter的所有mp3移动到名为peter的文件夹

@echo off
set "string=peter"
for %%a in ("*%string%*.mp3") do (
md "%string%" 2>nul
move "%%a" "%string%" >nul
)
pause