Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Переименование файлов из списка *.txt (http://forum.oszone.net/showthread.php?t=256874)

IntuitOS 22-03-2013 17:52 2116420

Переименование файлов из списка *.txt
 
Пожалуйста, помогите автоматизировать задачу.
Нужно создать 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 2118920

up!

gora 26-03-2013 19:03 2119148

IntuitOS, сделайте нуль-копии Ваших папок, заархивируйте и выложите их здесь.
Цитата:

Цитата IntuitOS
переименовывает файлы в другой папке(E:\папка_2), по этому списку, но оставляя их исходное расширение(*.mp4). »

Непонятно. Берет первый попавшийся файл из "другой папки" и присваивает ему новое имя из списка? Ни как имена в списке и переименованные файлы сопоставлять не надо? А что делать, если число имен в списке и файлов в папке не совпадет в ту или иную сторону?

IntuitOS 28-03-2013 12:17 2120602

Вложений: 1
Цитата:

Цитата IntuitOS
Ни как имена в списке и переименованные файлы сопоставлять не надо? А что делать, если число имен в списке и файлов в папке не совпадет в ту или иную сторону? »

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

Цитата:

Цитата gora
сделайте нуль-копии Ваших папок »

не получается, где должна создаться эта копия?

gora 28-03-2013 13:52 2120664

Батник 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 2120687

gora, спасибо огроменное, работает! Я только добавил
PHP код:

@chcp 1251 

в начало(не понимал кириллицу) и свой путь прописал.
и без
PHP код:

if 

в первом батнике обошлось))

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

Iska 28-03-2013 15:42 2120765

Цитата:

Цитата IntuitOS
Я только добавил
Код:

@chcp 1251
в начало(не понимал кириллицу) »

Вместо этого надо сохранять пакетный файл в кодировке OEM/866.

gora 28-03-2013 16:03 2120790

Цитата:

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

Не должно быть такого. Видимо Вы что-то меняли в первом батнике. Файл-список должен сохраняться в кодировке Кириллица DOS (866) и должен содержать только имена файлов без расширения.
Сами скрипты тоже должны быть сохранены в этой кодировке, если пути, которые Вы правите в них, содержат кириллицу.

IntuitOS 28-03-2013 16:36 2120814

Цитата:

Цитата gora
и должен содержать только имена файлов без расширения. »

сорри, это мой косяк, я на всякий случай делал дубликат списка, прежде чем, bat-ы запускать, вообщем с ним и запутался.

Цитата:

Цитата Iska
Вместо этого надо сохранять пакетный файл в кодировке OEM/866. »

с помощью NotePad++ это можно сделать? или как лучше?

Iska 28-03-2013 16:57 2120839

Цитата:

Цитата IntuitOS
с помощью NotePad++ это можно сделать? »


IntuitOS 30-03-2013 00:13 2121918

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

Спасибо огромное, всем за помощь, вопрос решён - задача автоматизирована.:)

Iska 30-03-2013 00:44 2121935

Цитата:

Цитата IntuitOS
иначе русские символы заменялись чем-то другим. »

Они не заменялись, просто представлялись в иной кодировке. Самый простой способ — выделили текст, вырезали, затем сменили кодировку на потребную, вставили текст.

IntuitOS 30-03-2013 10:36 2122063

Iska, буду знать, спасибо.


Время: 05:51.

Время: 05:51.
© OSzone.net 2001-