2012-10-23 94 views
1

事情我想要做的是從含有各種視頻文件名的文本文件,篩選出特定的視頻文件擴展名如FILENAME.TXT內容修改For循環變量在cmd

Red.mp4 
Yellow.mp4 
Blue.mp4 
Orange.wmv 
Purple.wmv 

現在,我將分析此文件的.mp4 only &利用'for參數'製作幾個 .txt文件,每個文件都包含特定文件的特定代碼。換言之將在FILENAME.TXT我的代碼

::== 
@echo off 
setLocal EnableDelayedExpansion 
for /f "tokens=* delims= " %%a in ('type filename.txt ^|findstr ".mp4"') do (
set /a n+=1 
echo >myfile!n!.txt 
set v!n!=x264 --crf 23 --level 3.1 --tune film --o "%%a" "%%a.mkv" 
) 
set v 
pause 
::== 

我有問題創造一樣.mp4格式的視頻數量的文件數:

  1. 如何修改 %%一去除它的.mp4字符串,因爲當我應用「%% a.mkv」時,一個文件將被命名爲* .mp4.mkv,我不希望那樣,.mp4可以像手動輸入--o「%% a .mp4「」%% a.mkv「
  2. 假設已經創建了所需的txt文件怎麼做我傳遞變量V1,V2,V3 ......到我

    盡了各自的文本文件

    呼應%V!N!%>> MYFILE!N!.txt文件環路內 ,但它沒有工作,所以PLZ建議

回答

2

我看不出有任何需要創建一個數組變量有一個環,然後將內容添加到文件的第二環。只需在一個循環中完成所有工作

此外,沒有必要創建一個空文件,並且您嘗試這樣做是不正確的 - 它將行ECHO is off.添加到每個文件。要回顯空行,您應該使用>filename ECHO(。要創建一個空文件,請使用copy nul filename

這不太可能是一個問題,但文件名可能包含!。如果啓用延遲擴展,則包含!的FOR變量的擴展將被破壞。這個問題可以通過在循環中打開和關閉延遲擴展來解決,但還有另外一種解決方法:使用另一個FINDSTR命令在每行前加上行號,然後用FOR循環解析行號和文件名。這消除了增加計數器的需要,並消除了延遲擴展的需要。

用於變量修飾符的~n用於獲取沒有擴展名的名稱。

@echo off 
for /f "tokens=1* delims=:" %%A in (
    'findstr /lie ".mp4" filename.txt^|findstr /n "^"' 
) do (
    >"myfile%%A.txt" echo x264 --crf 23 --level 3.1 --tune film --o "%%B" "%%~nB.mkv" 
) 
+0

我建議使用'echo。> filename'來回顯空白行。閱讀比替代方案更容易閱讀。 –