我嘗試使用命令COPY將檔案夾中的 *.mp3 檔案合并為一個 MP3 檔案,并使用選項合并檔案/b。
到目前為止我有這個命令,但我很難理解如何讓它為檔案夾中的每個檔案回圈。
for /f "tokens=*" %a in ('"dir /b *.mp3"') do echo copy /b %a %a final.mp3
我的檔案夾是:
D:\data\mp3_files\song one.mp3
D:\data\mp3_files\song two.mp3
我以前可以在壓縮每個檔案的多個檔案上執行此操作,但我不知道如何合并檔案,copy /b因為檔案的數量是未知的。所以我不知道 %a我會用多少。
語法是:copy /b file1.mp3 file2.mp3 targetfile.mp3
我的問題是我不知道如何寫file1.mp3 file2.mp3為變數。
我有這個:copy /b %a %a final.mp3
我不知道放多少次,%a因為我不知道目錄中有多少檔案。
我也不知道為什么我要寫兩次同一個變數。
不知道如何正確編碼。
uj5u.com熱心網友回復:
該檔案合并任務可以使用以下代碼通過批處理檔案完成:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.mp3 /A-D /B /ON 2^>nul') do copy /B "%%I" "TempFile.tmp" >nul & goto MergeFiles
:MergeFiles
for /F "skip=1 eol=| delims=" %%I in ('dir *.mp3 /A-D /B /ON 2^>nul') do copy /B "TempFile.tmp" "%%I" "TempFile.tmp" >nul
if exist "TempFile.tmp" ren "TempFile.tmp" "final.mp3"
if exist "TempFile.tmp" del "TempFile.tmp"
endlocal
首先通過檔案名排序的命令DIR將當前目錄中的第一個 MP3 檔案復制到TempFile.tmp. 重要的是臨時檔案的檔案擴展名不是.mp3,否則臨時檔案也將出現在 MP3 檔案串列中,以供下一個FOR回圈處理。
命令GOTO導致在復制第一個 MP3 檔案后退出第一個回圈。
第二個FOR回圈像第一個FOR回圈一樣在后臺運行一個命令列程來執行DIR以獲取檔案擴展名.mp3按名稱排序的檔案名串列,該串列由處理批處理檔案的命令列程捕獲并逐行處理下一行忽略DIR的輸出中不存在的空行。
對于每個檔案名,執行命令COPY以將當前臨時檔案與串列中的當前 MP3 檔案合并在一起,以創建一個新的臨時檔案,在該臨時檔案上附加當前 MP3 檔案。
最后,在將一個 MP3 檔案一個接一個地附加到臨時檔案之后,臨時檔案被重命名為最終生成的 MP3 檔案的所需名稱,或者final.mp3在洗掉臨時檔案時已經存在的錯誤情況下。
如果 MP3 檔案的數量不太大,也可以使用以下批處理檔案,因此最終分配給環境變數的字串FileList不會超過 8182 個字符,因為環境變數名稱加上等號加上分配給的字串長度環境變數加上以 null 結尾的字串不能超過 8192 個字符。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "FileList="
for /F "eol=| delims=" %%I in ('dir *.mp3 /A-D /B /ON 2^>nul') do call :AppendFileName "%%I"
goto MergeFiles
:AppendFileName
set FileList=%FileList% %1
goto :EOF
:MergeFiles
if not defined FileList exit /B
copy /B %FileList:~1% "final.mp3" >nul
endlocal
該批處理檔案將在當前目錄中找到的所有 MP3 檔案的檔案名連接在一起,并在每個檔案名之間(以及字串值的開頭)"連接到單個命令列,并最終運行命令COPY與所有檔案名(沒有第一個加號)將它們一次合并到檔案中。 FileListfinal.mp3
具有最大字串長度限制的第二種解決方案更快,因為在執行批處理檔案時只完成了一次資料復制。
要了解使用的命令及其作業原理,請打開命令提示符視窗,在其中執行以下命令,并仔細閱讀每個命令顯示的所有幫助頁面。
call /?copy /?del /?dir /?echo /?endlocal /?exit /?for /?if /?goto /?set /?setlocal /?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/492629.html
上一篇:For回圈在R中繪制多個變數
