3

我有一长串单独的歌曲,而不是文件夹中的歌曲,我想将它们移动到他们艺术家的文件夹中。歌曲格式如下

艺术家 - 歌曲名.flac

我可以将它们存储在一个列表中,然后回显它,但是将艺术家和歌曲名分成 2 个变量,我似乎无法弄清楚。

有人可以帮我拆分(或者如果你想要脚本的其余部分)

这就是我到目前为止所拥有的:

@echo off
setlocal enabledelayedexpansion
set N=0
for %%i in (*) do (
    set Files[!N!]=%%~ni
    set /a N+=1

)
for /l %%x in (1,1,%N%) do echo.!Files[%%x]!

pause
4

3 回答 3

3
set SOURCE=c:\temp\test
for /f "delims=-. tokens=1,2" %%i in ('dir /b "%SOURCE%\*.flac"') do echo Artist : %%i  Song : %%j

更新完整脚本(必须检查它是否适用于路径中的空格和特殊字符):

@echo off
setlocal enabledelayedexpansion
set SOURCE=c:\temp\test
set DESTINATION=c:\temp\test

for /f "tokens=*" %%i in ('dir /b "%SOURCE%\*.flac"') do call :OrderThatMess "%%i"

:OrderThatMess

set NAME=%1
for /f "tokens=1,2 delims=-. " %%j in (%1) do (
    set ARTIST=%%j
    set TITLE=%%k
    if not exist "%DESTINATION%\%ARTIST%" (md "%DESTINATION%\%ARTIST%" )
    copy %SOURCE%\%NAME% "%DESTINATION%\%ARTIST%\%TITLE%.flac"
    )
于 2013-06-18T19:12:46.437 回答
3
@echo OFF &SETLOCAL ENABLEDELAYEDEXPANSION
for %%i in (*.flac) do (
    set /a N+=1
    FOR /f "tokens=1,2 delims=- " %%o IN ("%%~ni") DO (
        set "FilesA[!N!]=%%~o"
        set "FilesB[!N!]=%%~p"
    )
)
for /l %%x in (1,1,%N%) do echo(!FilesA[%%x]! !filesB[%%x]!
于 2013-06-18T19:23:37.137 回答
1

感谢您的回答;)感谢Kayasax我修复了它

这是完整的代码:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set SOURCE=C:\music\folder\with\files\
for /f "tokens=1,2 delims=-" %%i in ('dir /b "%SOURCE%\*.flac"') do (
        set "folder=%%i"

        IF NOT EXIST "%SOURCE%\%%i" (
            mkdir "%%i"
        )

        move "%SOURCE%\%%i-%%j" "%SOURCE%\!folder:~0, -1!\%%i-%%j"
    )


pause
于 2013-06-18T19:53:52.957 回答