Войти

Показать полную графическую версию : Переименование файлов из списка *.txt


IntuitOS
22-03-2013, 17:52
Пожалуйста, помогите автоматизировать задачу.
Нужно создать 2 батника:
1) сохраняет оригинальные имена файлов конкретной директории(Например, E:\папка_1) в текстовый файл(files.txt), создавая его рядом с батником и переименовывает эти файлы с нумерацией(video_01.avi, video_02.avi и т.д.).
2) считывает имена файлов из files.txt и переименовывает файлы в другой папке(E:\папка_2), по этому списку, но оставляя их исходное расширение(*.mp4).

С сохранением в файл разобрался.
Удалось реализовать переименование файлов с нумераций. Но ведёт себя скрипт странно. При первом запуске файлы переименовываются так: video_02, video_03 и далее(нужно с video_01). Если повторно запустить, то уже с _01 и далее. Подскажите, в чём ошибка?
@chcp 1251
dir e:\Проекты\Сжатие\DV\Original /b>files.txt
set /a PN=1
for %%a in (e:\Проекты\Сжатие\DV\Original\*.avi) do call :PROCESS "%%a"
goto :EOF
:PROCESS
if /i %PN% LSS 10 (rename %1 Video_0%PN%.avi
set /a PN+=1) else (rename %1 Video_%PN%.avi
set /a PN+=1)

обратное переименование можно пока через TotalCommander выполнять, но до полной автоматизации всё-таки нужен второй бат-файл. Помогите, плиз...

IntuitOS
26-03-2013, 14:31
up!

gora
26-03-2013, 19:03
IntuitOS, сделайте нуль-копии (http://forum.oszone.net/thread-256082.html) Ваших папок, заархивируйте и выложите их здесь.переименовывает файлы в другой папке(E:\папка_2), по этому списку, но оставляя их исходное расширение(*.mp4). »
Непонятно. Берет первый попавшийся файл из "другой папки" и присваивает ему новое имя из списка? Ни как имена в списке и переименованные файлы сопоставлять не надо? А что делать, если число имен в списке и файлов в папке не совпадет в ту или иную сторону?

IntuitOS
28-03-2013, 12:17
Ни как имена в списке и переименованные файлы сопоставлять не надо? А что делать, если число имен в списке и файлов в папке не совпадет в ту или иную сторону? »
Переименование файлов в список и обратно - часть другой большой задачи: сжатие большого количества несжатого архивного видео. Т.е. порядок действий такой: создаётся список с именами, файлы в папке Original переименовываются к общему виду с нумерацией, все файлы конвертируются, сконверченное видео сохраняется в папку Video и в ней нужно эти файлы переименовать обратно. Количество файлов будет таким же, ну а если переименование происходит в том же порядке, то сопоставлять по идее не надо.

сделайте нуль-копии Ваших папок »
не получается, где должна создаться эта копия?

http://i51.fastpic.ru/big/2013/0328/54/3aedcdfa9a190b0e7aa0534477ea4f54.gif (http://fastpic.ru/)

gora
28-03-2013, 13:52
Батник 1:@Echo Off
:: Кодировка файла Кириллица DOS (866)
SetLocal EnableDelayedExpansion
Set folder=e:\Temp\Сжатие\DV\Original
Set list=files.txt

Del "%list%">Nul
Set cnt=0
For /F "tokens=* usebackq" %%a In (`Dir /B /A:-D "%folder%"`) Do (
>>"%list%" Echo %%~na
Set /A cnt +=1
Set XX=0!cnt!
Ren "%folder%\%%a" "Video_!XX:~-2!.avi"
)
Pause


Батник 2:@Echo Off
:: Кодировка файла Кириллица DOS (866)
SetLocal EnableDelayedExpansion
Set folder=e:\Temp\Сжатие\DV\Video
Set list=files.txt

Set cnt=0
For /F "tokens=* usebackq" %%a In ("%list%") Do (
Set /A cnt +=1
Set XX=0!cnt!
Set $var!XX:~-2!=%%a
)
Set cnt=0
For /F "tokens=* usebackq" %%a In (`Dir /B /A:-D "%folder%"`) Do Call :_ren "%%a"
Pause
Exit

:_ren
Set /A cnt +=1
Set XX=0!cnt!
Ren "%folder%\%~1" "!$var%XX:~-2%!%~x1"
GoTo :EOF

IntuitOS
28-03-2013, 14:26
gora, спасибо огроменное, работает! Я только добавил @chcp 1251 в начало(не понимал кириллицу) и свой путь прописал.
и без if в первом батнике обошлось))

Упс, заметил, 2 батник переименовывает не много не верно: он заменяет имя у файла с расширением avi, т.е. получается так:"1просто.avi.mp4"

Iska
28-03-2013, 15:42
Я только добавил
@chcp 1251
в начало(не понимал кириллицу) »
Вместо этого надо сохранять пакетный файл в кодировке OEM/866.

gora
28-03-2013, 16:03
Упс, заметил, 2 батник переименовывает не много не верно: он заменяет имя у файла с расширением avi, т.е. получается так:"1просто.avi.mp4" »
Не должно быть такого. Видимо Вы что-то меняли в первом батнике. Файл-список должен сохраняться в кодировке Кириллица DOS (866) и должен содержать только имена файлов без расширения.
Сами скрипты тоже должны быть сохранены в этой кодировке, если пути, которые Вы правите в них, содержат кириллицу.

IntuitOS
28-03-2013, 16:36
и должен содержать только имена файлов без расширения. »
сорри, это мой косяк, я на всякий случай делал дубликат списка, прежде чем, bat-ы запускать, вообщем с ним и запутался.

Вместо этого надо сохранять пакетный файл в кодировке OEM/866. »
с помощью NotePad++ это можно сделать? или как лучше?

Iska
28-03-2013, 16:57
с помощью NotePad++ это можно сделать? »
http://oi47.tinypic.com/4v5mv6.jpg

IntuitOS
30-03-2013, 00:13
Iska, получилось только после того, как создал файл сразу с OEM 866, иначе русские символы заменялись чем-то другим. Причём текстовый файл files.txt тоже нужен был с OEM 866.
http://i53.fastpic.ru/big/2013/0329/ef/ff9d1225f543db2bf644c9c65f6746ef.gif
Спасибо огромное, всем за помощь, вопрос решён - задача автоматизирована.:)

Iska
30-03-2013, 00:44
иначе русские символы заменялись чем-то другим. »
Они не заменялись, просто представлялись в иной кодировке. Самый простой способ — выделили текст, вырезали, затем сменили кодировку на потребную, вставили текст.

IntuitOS
30-03-2013, 10:36
Iska, буду знать, спасибо.




© OSzone.net 2001-2012