[英]Windows Batch Script - Read file names into variables
我試圖逐個轉換目錄中的文件(電影)。 每個新轉換的文件都需要分配一個新文件名 - 舊文件名具有新擴展名。
我已經嘗試過以下內容來閱讀源文件,剝離擴展並分配一個新文件:
@echo off
setlocal DisableDelayedExpansion
cd \target_dir
for %%x in (*) do (
echo %%x
set source=%%x
echo Source #%source%#
set target=%source:.mpg=%
echo Target #%target%#
transcode %source% %target%.mp4
)
不幸的是,這不起作用。 如輸出所示,我甚至無法將當前文件復制到變量“source”中:
E:\target_dir>..\test.bat
movie1.mpg
source ##
target ##
movie2.mpg
source ##
target ##
我用Google搜索並認為我已找到正確的語法,但這似乎不是它。 謝謝你的幫助!
這有效:
@echo off
cd \target_dir
for %%x in (*) do (
transcode "%%x" "%%~nx.mp4"
)
請注意,您不能在標准環境變量上使用%%~n
語法 - 您需要直接訪問for循環變量。
編輯:添加引號以使批處理使用其名稱中也包含空格的文件。
jlahd顯示正確的解決方案,而不將文件名復制到變量。
但我想解釋你目前的問題。
如輸出所示,我甚至無法將當前文件復制到變量“source”中:
你找到了BBB(批量初學者bug),實際上你設置了變量,但是你以后無法訪問內容。
這是批處理解析器使用代碼塊的效果,因為這些塊被解析並且在執行代碼之前將完成百分比擴展。
代碼塊是括號內的代碼或由&
, &&
或||
連接的命令 。
為了避免這個問題,引入了延遲擴展。
然后你就可以使用!variable!
在運行時擴展變量。
setlocal EnableDelayedExpansion
cd \target_dir
for %%x in (*) do (
echo %%x
set source=%%x
echo Source #!source!#
set target=!source:.mpg=!
echo Target #!target!#
transcode !source! !target!.mp4
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.