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

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

Ответить
Настройки темы
CMD/BAT - [решено] Переименование файлов с указанием порядкового номера

Аватара для shao

Ветеран


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

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


Изменения
Автор: shao
Дата: 01-05-2011
Есть количество файлов которые нужно переименовать.
Прошу помощи - нужен универсальный (по возможности) батник который будет переименовывать файлы.
Важно не то, какое будет текстовое название ( по умолчанию используется исходное название и , как второй вариант - оно должно задаваться пользователем),
а то, чтобы в начале названия присутствовал порядковый номер.

Например:
Код: Выделить весь код
textA_textB_text001.xxx
textA_textB_text002.xxx
.......................................

на

001_textA_textB.xxx
002_textA_textB.xxx
................................
Более того , если в папке первый файл имеет порядковый номер не 001, а любой последующий - важно,
чтобы при переименовании файла сохранялся свой оригинальный порядковый номер.

Например так:
Код: Выделить весь код
textA_textB_text051.xxx
textA_textB_text052.xxx
.......................................

на 

051textA_textB.xxx
052textA_textB.xxx
..............................
Спасибо!

Отправлено: 13:13, 30-04-2011

 

Ветеран


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

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


shao,
Например переименовываем 100 файлов *.txt. Без привязки к исходному названию:
Код: Выделить весь код
@echo off
setlocal

for %%i in (*.txt) do call:rename "%%i"
goto:eof

:rename
set /a cnt+=1
set "pref=00%cnt%"
ren %1 "%pref:~-3%_newname.txt"
PS. Не 100 а до 999

Последний раз редактировалось Foreigner, 30-04-2011 в 15:52.

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

Отправлено: 15:40, 30-04-2011 | #2



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

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


Аватара для shao

Ветеран


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

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


Foreigner, Отлично! Спасибо - работает.

Пожалуйста, ещё бы вариант привязки к исходному названию. Чтобы не вносить название каждый раз
вручную. Вот так:

Код: Выделить весь код
textA_textB_text001.xxx
textA_textB_text002.xxx
.......................................

на

001_textA_textB.xxx
002_textA_textB.xxx
................................
И, наберусь наглости ещё попросить обЪяснить как работает Ваш код..

Отправлено: 11:17, 01-05-2011 | #3


Ветеран


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

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


shao,
Цитата:
вариант привязки к исходному названию
Этот вариант только для переименовывания конкретно ваших файлов
Цитата:
обЪяснить как работает
Код: Выделить весь код
@echo off
setlocal

:: Перебираем все файлы *.ххх в текущей директории и каждый 
:: из них передаём в процедуру переименовывания (метка :ren)
for %%i in (*.xxx) do call:ren "%%i"

:: Выход из батника
goto:eof

:: Здесь переименовываем поступивший из цикла for файл
:ren

:: Переменная old получает значение имени файла 
set "old=%~n1"

:: Переменная pref получает подстроку -- 3 последних символа в имени файла, т.е. номер
set "pref=%old:~-3%"

:: Переименовываем файл
ren %1 "%pref%_%old:~0,-3%%~x1"

:: Где:
:: %1 -- поступивший файл
:: %old:~0,-3% -- подстрока из имени с 1 до -3 символа ( т.е. отрезали номер )
:: %~x1 -- расширение файла ( .ххх )
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:15, 01-05-2011 | #4


Аватара для shao

Ветеран


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

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


Foreigner, спасибо большое за второй скрипт и обЪяснение.
И если не затруднит - обЪясните ещё пожалуйста этот момент:

Код: Выделить весь код
.......
:rename
set /a cnt+=1
set "pref=00%cnt%"
ren %1 "%pref:~-3%_newname.txt"
из первого скрипта.

Отправлено: 00:04, 02-05-2011 | #5


Ветеран


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

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


shao,
Код: Выделить весь код
:: Увеличиваем с каждым вызовом порядковое число ( перем. %cnt% ) на 1  
set /a cnt+=1

:: Определяем числовой префикс для будущего переименования ( 001, 0010, 00122 и т.д. )
set "pref=00%cnt%"

:: Переименовываем 
ren %1 "%pref:~-3%_newname.txt"

:: Где %1 -- исходное имя файла, переданное из цикла for
:: %pref:~-3% -- префикс, приведенный к одной длине, взяты три последние символа ( 001, 010, 122 ).
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:24, 02-05-2011 | #6


Аватара для shao

Ветеран


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

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


Foreigner, Спасибо Вам за помощь!

Всё понятно , кроме одного. Что такое "cnt" ?

Отправлено: 11:18, 02-05-2011 | #7


Ветеран


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

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


Цитата shao:
Что такое "cnt" ? »
Просто название переменной. ( от англ. 'count' )
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:26, 02-05-2011 | #8


Ветеран


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

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


Цитата shao:
Что такое "cnt" ? »
При использовании в операторе «set» формы «/a» (целочисленные вычисления) нет необходимости использовать «%»/«!» для раскрытия переменных окружения, сие делается автоматически, причём всегда как отложенное раскрытие.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:49, 02-05-2011 | #9


Googler


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

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


Цитата Iska:
При использовании в операторе «set» формы «/a» (целочисленные вычисления) нет необходимости использовать «%»/«!» для раскрытия переменных окружения, сие делается автоматически, причём всегда как отложенное раскрытие. »
не нужно путать подстановки CMD (в т.ч. отложенные) и "подстановки" SET (у которого свой парсер)
читать дальше »
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

set/a "$x=$x+1,$x=$x+1,$x=$x+1"
set/a "$y=!$y!+1,$y=!$y!+1,$y=!$y!+1"

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

Отправлено: 16:18, 03-05-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Смена порядкового номера монитора M1ndW0rk Microsoft Windows 2000/XP 19 04-12-2020 23:39
CMD/BAT - [решено] Список файлов из поддиректорий с указанием полного пути Sat_Kelman Скриптовые языки администрирования Windows 4 20-03-2020 17:17
CMD/BAT - Переименование файлов. gen0m.rsw Скриптовые языки администрирования Windows 1 15-10-2010 19:15
Как сделать наглядный листинг папок и файлов с указанием всех прав доступа chickaboo Microsoft Windows NT/2000/2003 10 15-02-2008 16:54
переименование файлов mask Программирование и базы данных 6 20-05-2003 00:53




 
Переход