批量重命名来自不同变量的文件

时间:2015-11-06 23:17:04

标签: variables batch-file batch-rename

我有文本文件(2.txt),行数均匀。奇数行是我需要重命名的文件的当前名称(奇数行包含文件扩展名)。偶数行是相应文件的新名称(偶数行不包含文件扩展名)。

E.g。这样的文件:

001.mp3

第一首歌。

002.mp3

我也是一首歌!

003.mp3

他是那个会重命名我的人......

(文件结束)

我想循环遍历文件,将行读入变量,检查它是否包含扩展名(mp3)。如果是(奇数行),则将其保存为“名称”变量。如果不是(偶数行),则将其保存到“line”变量,并将点和扩展名添加到末尾(例如,First song..mp3)并将“name”文件重命名为“line”文件。因此“001.mp3”将被重命名为“First song..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

2 个答案:

答案 0 :(得分: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 . . .

如果您觉得屏幕上的输出看起来不错,请在重命名命令之前删除ECHO。

答案 1 :(得分: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