[英]Windows command working in cmd but not in .bat file
您好,我正在嘗試創建Windows腳本以從目錄中所有.mkv文件中提取字幕,但我遇到了問題。
這是我的腳本:
dir /b | findstr .*".mkv"$ > tmpFile
for /f "tokens=*" %f in (tmpFile) do start mkvextract.exe tracks %f 2:%~nf.ass
del tmpFile
問題是,當我在cmd.exe中執行它時,一切正常,但是當我將其包裝在.bat文件中時,只能執行第一行和第三行。
對於表示此錯誤的行
C:\test>dir /b | findstr .*".mkv"$ 1>tmpFile
The following usage of the path operator in batch-parameter
substitution is invalid: %~nf.ass
For valid formats type CALL /? or FOR /?
The syntax of the command is incorrect.
C:\test>for /f "tokens=*" f 2:n (tmpFile) do start
mkvextract.exe tracks %f 2:%~nf.ass
我正在嘗試更改腳本以修復錯誤,但我唯一實現的是即使在命令行中也無法運行。 請幫忙。 :)
WHat dir /b | findstr .*".mkv"$ > tmpFile
dir /b | findstr .*".mkv"$ > tmpFile
應該做什么(看起來像javascript regex)?
在批處理文件中,您需要雙%
的FOR令牌:
dir /b | findstr /i /e ".mkv" > tmpFile
for /f "tokens=*" %%f in (tmpFile) do start mkvextract.exe tracks %%f 2:%%~nf.ass
del tmpFile
盡管可以在沒有臨時文件的情況下完成:
for /f "tokens=*" %%f in ('dir /b ^| findstr /i /e ".mkv"') do start mkvextract.exe tracks %%f 2:%%~nf.ass
代碼的問題在於,將命令放置在批處理文件中時,必須將百分號加倍,如npocmaka在其答案中所示。 但是,我想稍微分析一下您的代碼。 在這一行:
dir /b | findstr .*".mkv"$ > tmpFile
dir /b
命令生成文件名列表, findstr
命令僅獲取以任何字符串開頭並以“ .mkv”結尾的名稱,並將重定向的名稱存儲在“ tmpFile”中。 上一行的最終效果是“將擴展名為.mkv的文件名存儲在tmpFile中”。 (使用dir /b *.mkv > tmpFile
命令可能會得到相同的結果)。
第二行:
for /f "tokens=*" %f in (tmpFile) do start mkvextract.exe tracks %f 2:%~nf.ass
處理以前的名稱,並為每個名稱執行一個start ...
命令。 最終效果是“在每個擴展名為.mkv的文件上執行start ...
命令”。 最后一行:
del tmpFile
只需刪除輔助文件即可。
使用此命令,您可能會得到與前三行相同的結果:
for %f in (*.mkv) do start mkvextract.exe tracks %f 2:%~nf.ass
如果要將先前的命令放在批處理文件中,只需將百分號加倍:
for %%f in (*.mkv) do start mkvextract.exe tracks %%f 2:%%~nf.ass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.