好的,我已經在這幾天了。我一步一步地嘗試過,但總是有問題。
我想做的是:我的整個音樂收藏都放在一個外部硬碟上。我想運行一個批處理檔案,它將:
- 進入每個類別檔案夾(類別是藝術家姓名的第一個字母)
- 為類別創建一個降價檔案,列出該類別中的每個藝術家
- 進入每個藝術家檔案夾
- 為列出每個專輯的藝術家創建一個降價檔案
- 進入每個專輯檔案夾
- 為列出每個曲目的專輯創建一個降價檔案
- 創建一個 mp3 檔案夾并將該專輯的所有 mp3 移動到其中
這是我嘗試過的(以及...的許多變體)
制作類別的臨時串列..
for /f %%I in (.) do break > %%~nxI
dir /b /o:n /a:d > temp_categories.txt
對于每個類別,制作一個類別降價檔案
for /f "delims=" %%C in (TEMP_categories.txt) do (
echo The %%C category >> %%C.md
然后我基本上做同樣的事情來進入每個藝術家檔案夾和每個專輯。當我進入相冊檔案夾時,我添加...
mkdir mp3
move [/Y | /-Y] *.mp3 mp3
它一直有效,直到進入第一類第一位藝術家的第一張專輯。它會添加 mp3 檔案夾,但不會移動檔案,并且永遠不會轉到下一個專案。
我意識到這可能不是最好的代碼。但我只需要它作業一次。否則,我需要手動完成所有操作。
uj5u.com熱心網友回復:
@ECHO OFF
SETLOCAL
rem The following setting for the source directory is a name
rem that I use for testing and deliberately includes 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"
rem C ategories
FOR /d %%C IN ( "%sourcedir%\*") DO (
CALL :validatecategory "%%~nxC"
IF NOT DEFINED invalidcat (
rem aR tists
FOR /d %%R IN ( "%sourcedir%\%%~nxC\*") DO (
ECHO %%~nxR>>"%%C\%%~nxC artists.md"
rem A lbum
FOR /d %%A IN ( "%sourcedir%\%%~nxC\%%~nxR\*") DO (
ECHO %%~nxA>>"%%R\%%~nxR albums.md"
MD "%%A\mp3" 2>nul
rem T rack
FOR %%T IN ( "%sourcedir%\%%~nxC\%%~nxR\%%~nxA\*.mp3") DO (
ECHO %%~nxT>>"%%A\%%~nxA tracks.md"
MOVE "%%T" "%%A\mp3" >nul
)
)
)
)
)
GOTO :EOF
:: Categories must be one character
:validatecategory
SET "invalidcat=%~1"
SET "invalidcat=%invalidcat:~1%"
GOTO :eof
請注意,自始至終,%%Q 將具有完整的檔案/路徑名,%%~nxQ 將具有名稱,其中 Q 是 C:Category R:Rtist A:Album T:Track。
顯然,首先針對測驗子樹進行測驗。
請注意,我假設 .mp3 位于專輯目錄中。如果將 .mp3 移動到 MP3 目錄,則進一步運行將忽略它們,因此不應將 track.md 檔案初始化為空,但應在重新運行時洗掉其他 .md 檔案。
--- 對評論的回應
添加明顯的附加行
ECHO %%~nxR>>"%%C\%%~nxC artists.md"
CALL :makelinksfile "%%~nxR">>"%%C\%%~nxC artists_links.md"
rem A lbum
并在任何行下方添加新:makelinksfile例程GOTO :EOF
GOTO :eof
:: Transform spaces in artists' names (%1) to "% "
:makelinksfile
SET "artist=%~1"
SETLOCAL enabledelayedexpansion
ECHO !artist: =%%% !
endlocal
GOTO :eof
這里發生的事情artist是設定為提供的引數(藝術家的名字)并去掉了引號。
然后,setlocal enabledelayedexpansion呼叫決議技巧,以便在ed% 時替換空格。echo
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/444436.html
