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

Batch renaming files from different variables

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

例如此类文件的数量:

001.mp3

第一首歌。

002.mp3

我也是一首歌!

003.mp3

他就是给我改名的人...

(文件结束)

我想遍历文件,将行读入变量,检查它是否包含扩展名 (mp3)。如果是(奇数行),则将其保存到 "name" 变量。如果不是(偶数行),则将其保存到 "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.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。

这样试试:

@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