我想.flac
文件從X:\Music\flac\flacfolder\name.flac
使用ffmpeg
轉換爲X:\Music\mp3\flacfolder\name.mp3
,但我找不到如何通過同時傳遞目錄中不同的命令和操縱它循環。批次:通過文件夾和子文件夾循環,並讓他們到一個腳本
回答
通常,遞歸處理文件,我會建議使用for /R
loop。但是,在這種情況下,因爲我猜你想將目錄層次結構從源文件複製到目標文件夾,所以我不使用它,因爲它僅解析爲絕對路徑。相反,我使用xcopy /L
,它不會複製任何內容(歸因於/L
),但會將所有適用的項目列爲相對於源文件夾的路徑;然後繞回for /F
loop來閱讀相對路徑列表並解決與目標文件夾相關的問題;在循環體中最後需要放置ffmpeg
(根據需要定義選項並在測試之後刪除前面的大寫ECHO
; ffmpeg
工具不會接收任何相對路徑,但僅對輸入和輸出文件都使用絕對路徑):
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_SOURCE=X:\Music\flac\flacfolder" & rem // (absolute source path)
set "_TARGET=X:\Music\mp3\flacfolder" & rem // (absolute target path)
set "_PATTERN=*.flac" & rem // (pure file pattern for input files)
set "_FILEEXT=.mp3" & rem // (pure file extension of output files)
pushd "%_TARGET%" || exit /B 1
for /F "delims=" %%F in ('
cd /D "%_SOURCE%" ^&^& ^(rem/ list but do not copy:^
^& xcopy /L /S /Y /I ".\%_PATTERN%" "%_TARGET%"^
^| find ".\" ^& rem/ remove summary line;
^)
') do (
2> nul mkdir "%%~dpF."
rem // Set up the correct `ffmpeg` command line here:
ECHO ffmpeg -i "%_SOURCE%\%%~F" "%%~dpnF%_FILEEXT%"
)
popd
endlocal
exit /B
如果你想在一個平面文件夾結構,而不是目標的文件,一個for /R
循環workes罰款:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_SOURCE=X:\Music\flac\flacfolder" & rem // (absolute source path)
set "_TARGET=X:\Music\mp3\flacfolder" & rem // (absolute target path)
set "_PATTERN=*.flac" & rem // (pure file pattern for input files)
set "_FILEEXT=.mp3" & rem // (pure file extension of output files)
for /R "%_SOURCE%" %%F in ("%_PATTERN%") do (
rem // Set up the correct `ffmpeg` command line here:
ECHO ffmpeg -i "%_SOURCE%\%%~F" "%_TARGET%\%%~nF%_FILEEXT%"
)
endlocal
exit /B
看起來它試圖搜索文件目錄中的文件,所以它找不到它們,例如:'。\ Braid \ 08告訴它由Heart.flac' 而不是'E:\ Music \ Loseless Game Soundtrack \ Braid \ 08告訴它由Heart.flac',但它完美地複製目錄。 此外,它會嘗試轉換.bat,.log和.png文件,但我認爲ffmpeg無論如何都會忽略它們,所以沒關係。 – arielbeje
因此,當您將'_SOURCE'定義爲'E:\ Music \ Loseless Game Soundtracks'時,腳本將找到文件'。\ Braid \ 08 * .flac'。我不知道'ffmpeg',所以我不確定它是否接受這樣的相對路徑,而且我也不知道'\'是否是這個工具的正確路徑分隔符(也許它可能期望'\\'或' /'),所以當腳本找到路徑時; ffmpeg'可能仍然無法找到它們。不過,我將文件模式從'*。*'更正爲'* .flac',同時不再匹配所有文件類型... – aschipfl
有沒有辦法讓它成爲非相對路徑? – arielbeje
我有一個我以前用過的例子。我嘗試添加你的結構。
@echo off
cd X:\Music\flac\flacfolder
for /F "tokens=1 delims=" %%i IN ('dir /s /b ^| findstr .flac') do (
call :process_code "%%i"
)
goto end
:process_code
echo Running conversion for %1
:: Run your process here
goto :eof
:end
echo done!
我希望這有助於
它似乎不適用於包含空格的文件名。 – arielbeje
@arielbeje使用'「%%我」'照顧空間。 – DavidPostill
@DavidPostill它會立即崩潰。 – arielbeje
試着這麼做:
@echo off
setlocal
set FLAC_FOLDER=c:\temp\flacfolder
set MP3_ROOT_FOLDER=c:\temp\mp3folder
echo Processing folder [%FLAC_FOLDER%]...
for /f "tokens=*" %%F in ('dir "%FLAC_FOLDER%\*.flac" /a-d /b') do call :PROCESS_FLAC_FILE "%FLAC_FOLDER%" "%%F"
goto END
:PROCESS_FLAC_FILE
set PFF_FOLDER=%1
set PFF_FILE=%2
set PFF_FOLDER=%PFF_FOLDER:"=%
set PFF_FILE=%PFF_FILE:"=%
for /f %%I in ("%PFF_FILE%") do set PFF_MP3_FILE=%%~nI.mp3
echo Processing FLAC file [%PFF_FILE%] in folder [%PFF_FOLDER%]; output file is [%PFF_MP3_FILE%]...
REM Now call ffmpeg using the approriate variables. Enclose the variables in double-quotes, e.g.:
REM (note, I don't know the syntax for ffmpeg, so I'm making this up as an example)
ffmpeg.exe -source "%PFF_FOLDER%\%PFF_FILE%" -target "%MP3_ROOT_FOLDER%\%PFF_MP3_FILE%"
goto END
:END
該腳本重複同一個文件幾次,只輸出兩個文件。我認爲我正確設置了ffmpeg: 'ffmpeg -i「%PFF_FOLDER%\%PFF_FILE%」-ab 320k -map_metadata 0 -id3v2_version 3 -n「%MP3_ROOT_FOLDER%\%PFF_MP3_FILE%」' – arielbeje
- 1. 如何通過文件夾循環移動文件夾(批量)?
- 2. 循環通過子文件夾和組合文本文件 - 輸出組合文件到文件夾
- 3. 通過子文件夾循環
- 4. 遞歸通過文件夾用批處理腳本移動和移動六天舊文件到子文件夾
- 5. 批處理腳本遞歸循環子目錄,並找到2個文件夾中的丟失文件
- 6. 循環通過子文件夾重命名Powershell中的文件
- 7. Scandir子文件夾問題,通過文件夾和文件循環到單獨的陣列中
- 8. Windows批處理循環通過子文件夾並運行命令
- 9. 通過www文件夾loopgap循環
- 10. 批處理通過所有文件和子文件夾
- 11. 一批FINDSTR子文件夾
- 12. Apache mod_rewrite一個子文件夾到子文件夾(通過內部重定向)
- 13. 批處理腳本查找子文件夾中的文件夾並獲得文件夾路徑
- 14. Python,通過文件夾中的文件循環並做一個字數
- 15. 從資源文件夾顯示文件,並讓他們下載
- 16. Windows將文件從子文件夾批量複製到一個文件夾
- 17. 如何通過文件夾循環和重命名文件
- 18. 如何通過文件夾和ssis中的文件循環
- 19. 通過文件夾和重命名文件的Python循環
- 20. 批處理文件遞歸循環通過子文件夾和條件刪除文件
- 21. shell腳本文件夾結構中循環和EXCUTE shell腳本
- 22. 在蘋果腳本中設置文件夾和子文件夾
- 23. Windows批處理FOR循環找到一個文件夾
- 24. Nodejs子文件夾腳本
- 25. PHP如果文件夾存在爲每個子文件夾做一個循環
- 26. 重命名批處理腳本,然後將文件從1個文件夾移動到其他文件夾。
- 27. 將文件夾中的文件和文件夾移動到另一個文件夾的批處理文件
- 28. .htaccess - 子文件夾到子文件夾=子文件夾404
- 29. 批處理文件「For/f」循環每個文件夾兩次並列出兩次文件
- 30. 批處理(xcopy所有文件到文件夾)與循環
事情更加容易,如果您切換到PowerShell的。 –