2015-11-06 53 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