Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Переименование файлов из списка *.txt

Ответить
Настройки темы
CMD/BAT - Переименование файлов из списка *.txt

Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: IntuitOS
Дата: 26-03-2013
Пожалуйста, помогите автоматизировать задачу.
Нужно создать 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 выполнять, но до полной автоматизации всё-таки нужен второй бат-файл. Помогите, плиз...

Отправлено: 17:52, 22-03-2013

 

Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


up!

Отправлено: 14:31, 26-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


IntuitOS, сделайте нуль-копии Ваших папок, заархивируйте и выложите их здесь.
Цитата IntuitOS:
переименовывает файлы в другой папке(E:\папка_2), по этому списку, но оставляя их исходное расширение(*.mp4). »
Непонятно. Берет первый попавшийся файл из "другой папки" и присваивает ему новое имя из списка? Ни как имена в списке и переименованные файлы сопоставлять не надо? А что делать, если число имен в списке и файлов в папке не совпадет в ту или иную сторону?

Отправлено: 19:03, 26-03-2013 | #3


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: 7z DV_Zero.7z
(460 байт, 10 просмотров)

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

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

Последний раз редактировалось IntuitOS, 28-03-2013 в 13:59.


Отправлено: 12:17, 28-03-2013 | #4


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось gora, 28-03-2013 в 15:59.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:52, 28-03-2013 | #5


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

@chcp 1251 


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

if 


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

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

Последний раз редактировалось IntuitOS, 28-03-2013 в 14:52.


Отправлено: 14:26, 28-03-2013 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата IntuitOS:
Я только добавил
Код: Выделить весь код
@chcp 1251
в начало(не понимал кириллицу) »
Вместо этого надо сохранять пакетный файл в кодировке OEM/866.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:42, 28-03-2013 | #7


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:03, 28-03-2013 | #8


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 16:36, 28-03-2013 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата IntuitOS:
с помощью NotePad++ это можно сделать? »
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:57, 28-03-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Переименование файлов из списка *.txt

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - вытащить из 3-x txt файлов строки в 4-й txt и отправить его в шару на сервер campbell Скриптовые языки администрирования Windows 1 10-11-2011 09:59
CMD/BAT - выполнение команд из списка в txt файле systemroot Скриптовые языки администрирования Windows 2 12-02-2011 17:49
CMD/BAT - [решено] Создание файлов из списка в txt kasik Скриптовые языки администрирования Windows 1 15-01-2011 20:04
.NET - [решено] Переименование файлов. форматы *.*, name.*, *.txt и тд Efsey Программирование и базы данных 9 25-08-2010 13:06
Удаление файлов из списка указанного в txt blacks2 Вебмастеру 28 02-09-2009 20:09




 
Переход