2012-10-30 88 views
0

我想掃描一個文件夾,其路徑由用戶輸入&定義,最後應用ffmpeg將所有媒體文件信息存儲到文本文件中。下面的代碼不起作用將文件夾路徑作爲變量cmd傳遞

@echo off 
setLocal EnableDelayedExpansion 
set /P "path=Enter folder path: " 
dir %path% /B /O:N | findstr ".wmv$ .mpg$ .mkv$ .mpeg$ .mp4$ .avi$" >filename.txt 
echo. >info.txt 
for /f "tokens=* delims= " %%a in ('type filename.txt') do (
set in=%in%%%a 
ffprobe "%path%!in!" 2>>info.txt 
) 
pause 

但是,如果我刪除用戶輸入如下代碼確實工作?

@echo off 
setLocal EnableDelayedExpansion 
::set /P "path=Enter folder path: " 
dir d:\Trainers\out\outt\ /B /O:N | findstr ".wmv$ .mpg$ .mkv$ .mpeg$ .mp4$ .avi$" >filename.txt 
echo. >info.txt 
for /f "tokens=* delims= " %%a in ('type filename.txt') do (
set in=%in%%%a 
ffprobe "d:\Trainers\out\outt\!in!" 2>>info.txt 
) 
pause 

以上腳本被置於含有ffprobe.exe &它成功地在同一個目錄 注意創建兩個txt文件的文件夾中d:\Trainers\out\outt\是掃描媒體文件&是從哪裏這隻蝙蝠的目錄的目錄文件被執行 ffprobe的基本語法是

ffprobe "videofile" 
+1

Windows環境變量不區分大小寫。不要使用%path%。除此之外,你確定變量正在獲得你期望的價值? – Wug

回答

5

使用與路徑不同的變量名稱。

PATH已經做了一些非常重要的事情。事實上,這一點非常重要,您的改變正是腳本破裂的原因。

更具體地說,當您嘗試僅使用文件名(完全沒有路徑)執行程序時,如果在工作目錄中找不到該程序,則會搜索PATH環境變量的內容。我沒有看到您收到的錯誤消息,但可能無法執行findstr,這是通常在PATH中指定的文件夾中找到的可執行文件。

+0

Thnx,你是對的 – nightcrawler

+1

@nightcrawler:對於你不應該使用的其他變量的列表,請拔出命令提示符併發出命令'set'。 – Wug

+0

哇!那裏有很多信息硬件信息......安靜有用。這些看不見的命令我不知道:(你會不會爲我推薦一些書?我對JavaScript和web編碼知道很多,但不是關於這個 – nightcrawler

1

用戶輸入命令看起來像錯誤的上下文。刪除引號,它應該正常工作。引號不需要將您的提示與用戶輸入分開。

相關問題