簡體   English   中英

Windows命令可在cmd中工作,但不能在.bat文件中工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM