2015-11-06 5 views
0

У меня есть текстовый файл (2.txt) с четным количеством строк. Нечетные строки - это текущие имена файлов, которые мне нужно переименовать (нечетные строки содержат расширение файла). Даже строки - это новые имена соответствующих файлов (даже строки НЕ содержат расширения файла).Пакетное переименование файлов из разных переменных

E.g. такого файла:

001.mp3

Первая песня.

002.mp3

Я песня тоже!

003.mp3

Он тот, кто будет переименовывать меня ...

(конец файла)

Я хочу проходным файл, прочитать строку в переменную, проверьте, содержит расширение (mp3). Если да (нечетная строка), сохраните его в переменной «name». Если нет (даже строка), сохраните его в переменной «line» с добавлением точки и добавочного расширения (например, «Первая песня..mp3») и переименуйте файл «name» в файл «line». Таким образом, «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 . . . 

Удалить ЭХО перед командой переименования, если вы чувствуете, что выход на экране выглядит хорошо.

+0

Хм, интересно. Он работает с вашим примером, но создает беспорядок из моих данных. Он создает что-то вроде этого: rename «001.mp3 \ N Name1.mp3» «002.mp3 \ N Name2.mp3». Где может быть проблема? – user2779047

+0

Без просмотра реальных данных было бы очень сложно устранить неполадки. Я не знаю, является ли ваш файл простым текстовым файлом ascii или unicode. Я также не знаю, заканчивается ли каждая строка в вашем файле возвратом каретки и фидом строки. – Squashman

+0

Aha, проверено на CR LF. На некоторых дорожках содержался только LF. Culprit found, теперь он показывает правильный переименование. Большое спасибо! – 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

Вы можете просто использовать модификаторы команд вместо того, чтобы пытаться получить подстроку строки. 'Если/i [%% ~ xa] == [. Mp3]' – Squashman

Смежные вопросы