我有以下有效的代碼,我用它來分組我的歌曲,但我仍然需要更多功能。
@echo off
setlocal enabledelayedexpansion
PushD %~dp0
set "songsPeralbum=2"
set "fcount=0"
set idx=0
for /F "delims=" %%I in ('dir /a-d /o:n /b *.wav') do (
REM echo Processing %%I
set /a idx=idx %% songsperalbum 1
if !idx! equ 1 set /a fcount =1
md Album-!fcount! 2>nul
move "%%I" "Album-!fcount!\"
REM pause
)
如果可能的話,我需要發生以下情況:
The song is of the form: Artist name - Song name
- 我希望批處理檔案搜索具有相同
藝術家姓名的所有歌曲 - 將它們分組到一個檔案夾中,其名稱為從藝術家名稱中找到的第一首歌曲的名稱,
- 在具有歌曲名稱的檔案夾中,應創建另一個具有藝術家姓名的檔案夾,
- 將歌曲(最終檔案)移動到帶有藝術家姓名的檔案夾中。
在ALBUMS檔案夾中,我有數百首歌曲:
Artist name1 - Song Name1.wav
Artist name1 - Song Name2.wav
Artist name2 - Song Name1.wav
Artist name2 - Song Name2.wav
Artist name2 - Song Name3.wav
and the list continue ...
為了更清晰,我制作了一個檔案夾結構。需要是這樣的:
───ALBUMS
│ ├───Song Name XXX
│ │ └───Artist Name1
│ │ ├───Artist name1 - Song Name XXX.wav
│ │ └───Artist name1 - Song Name2.wav
│ └───Song Name YYY
│ └───Artist Name2
│ ├───Artist name - Song Name YYY.wav
│ ├───Artist name - Song Name2.wav
│ └───Artist name - Song Name3.wav
批處理檔案將回圈運行,直到完成所有歌曲。
uj5u.com熱心網友回復:
@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
rem The following settings for the directory names are names
rem that I use for testing and deliberately include names which include spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:\your files"
SET "destdir=u:\your results"
SET "tempfile=%temp%\#$#$#$#.$#$"
(
FOR /f "delims=-" %%e IN (
'dir /b /a-d "%sourcedir%\*-*" '
) DO ECHO %%e
)>"%tempfile%"
FOR /f "delims=" %%e IN ('SORT /r /unique "%tempfile%"') DO (
SET "song="
FOR /f "tokens=1*delims=-" %%b IN ('dir /b /a-d "%sourcedir%\%%e-*" ') DO (
IF NOT DEFINED song (
SET "song=%%~nc"
SET "artist=%%b"
CALL :trim artist
CALL :trim song
MD "%sourcedir%\!song!\!artist!"
)
move "%sourcedir%\%%b-%%c" "%sourcedir%\!song!\!artist!"
)
)
DEL "%tempfile%"
GOTO :EOF
:trim
SET "#=!%1!"
:lead
IF "%#:~0,1%"==" " SET "#=%#:~1%"&goto lead
:trail
IF "%#:~-1%"==" " SET "#=%#:~0,-1%"&goto trail
SET "%1=%#%"
GOTO :eof
在應用于真實資料之前,請始終根據測驗目錄進行驗證。
創建一個包含藝術家姓名的臨時檔案,僅使用-
作為分隔符。
以反向字母順序對該檔案進行排序,以便在Artist name2
之后排序Artist name2 & Artist name4
并使用未記錄的/unique
開關來消除重復項。
然后使用藝術家的名字找到每個檔案;用作song
標志,因為兩者都song
需要artist
修剪前導/yrailing空格。當藝術家改變時,(first)song
被清除。如果song
未分配,則分配它并修剪artist
并song
創建目錄。
md
通過附加2>nul
到該行來抑制錯誤訊息
move
通過附加>nul
到該行來禁止報告。
我已經修復了 extension-name-in-directory-name 問題(設定song
為%%~nc
而不是%%c
- 將字串視為檔案名,并僅選擇name
沒有擴展名的部分。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/507901.html
下一篇:選擇腳本問題何時以及如何使用%1