2015-11-06 59 views
0

我有文本文件(2.txt)與偶數行。奇數行是我需要重命名的文件的當前名稱(奇數行包含文件擴展名)。即使行是相應文件的新名稱(偶數行不包含文件擴展名)。批量重命名文件來自不同的變量

E.g.這樣的文件:

001.mp3

第一首歌。

002.mp3

我也是一首歌!

003.mp3

他是一個誰都會重新命名我...

(文件結束)

我想通過文件循環,讀取行成變量,檢查它是否包含擴展名(mp3)。如果是(奇數行),則將其保存到「名稱」變量。如果不是(偶數行),則將其保存爲「行」變量,並將點和擴展名添加到末尾(例如,第一首歌曲.mp3),並將「名稱」文件重命名爲「行」文件。因此「001.mp3」將被重命名爲「第一首歌曲.mp3」。

我試圖結合來自不同來源的代碼的不同部分,但出了點問題。

FOR /F "tokens=*" %%i IN (2.txt) DO (
    set var=%%i 
    if not x%var:mp3=%==x%var% set name=%%i 
    if x%var:mp3=%==x%var% (
    set line=%%i.mp3 
    ren name line 
) 
) 
pause 
+0

因此,它是1.txt的或2.txt – Squashman

+0

2.txt。由於許多代碼正在進行測試,因此我有很多這樣的代碼。 – user2779047

回答

0

這是一些棘手的代碼。希望你能理解它。

我用這個作爲我的2.txt文件

001.mp3 
First song 
002.mp3 
I am a song 
003.mp3 
last song 
004.mp3 
my final! song 

這裏是我的代碼。

@echo off 
setlocal enableExtensions enableDelayedExpansion 
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "2.txt"') do set "lines=%%~a" 
set /a "lines=lines/2" 

< 2.txt (
    for /L %%l in (1, 1, %lines%) do (
     set "line1=" 
     set "line2=" 
     set /P "line1=" 
     set /P "line2=" 
     echo rename "!line1!" "!line2!.mp3" 
    ) 
) 

endlocal 
Pause 

我的輸出

rename "001.mp3" "First song.mp3" 
rename "002.mp3" "I am a song.mp3" 
rename "003.mp3" "last song.mp3" 
rename "004.mp3" "my final! song.mp3" 
Press any key to continue . . . 

rename命令之前取出ECHO如果你覺得屏幕上的輸出效果很不錯。

+0

嗯,有趣。它與你的例子一起工作,但卻造成了我的數據混亂。它創建如下所示:重命名「001.mp3 \ N Name1.mp3」「002.mp3 \ N Name2.mp3」。問題在哪裏? – user2779047

+0

如果沒有看到您的真實數據,將很難排除故障。我不知道你的文件是簡單的ascii文本文件還是unicode。我也不知道文件中的每一行是否以回車和換行符結束。 – Squashman

+0

Aha,檢查CR LF。一些車道只包含LF。罪魁禍首發現,現在它顯示正確的重命名模式。非常感謝你! – user2779047

0

嘗試這樣的:

@echo off 
setlocal enabledelayedexpansion 

for /f "delims=" %%a in (2.txt) do (
    set "$Line=%%a" 
    If /i [!$Line:~-4!]==[.mp3] (
     set "$FileMp3=%%a" 
     ) else (
        echo ren "!$FileMp3!" "%%a.mp3" 
       ) 
    ) 
) 

如果輸出是正確的去除echo

+0

您可以使用命令修飾符而不是嘗試獲取該行的子字符串。 '如果/我[%%〜xa] == [。mp3]' – Squashman