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

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

Ответить
Настройки темы
CMD/BAT - Последовательное, циклическое переименование файлов в каталоге по кругу в cmd.

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


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

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


Изменения
Автор: Vasylich
Дата: 07-04-2016
Описание: уточнение
Здравствуйте!
Почти не разбираюсь в скриптах, поэтому прошу помощи.
В каталоге есть файлы c числовыми именами: 01.jpg, 02.jpg и т.д.
Нужно переименовывать файлы так, что бы после каждого срабатывания cmd
последний становился первым по порядку цифр, первый вторым, второй - третьим и т.д..
Первоначальное именование по порядку возможно, если будет необходимо для скрипта.
Файлов может быть от 01 до 99.

Спасибо.

Отправлено: 14:40, 07-04-2016

 

Ветеран


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

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


Vasylich, Каждый запуск зеркально переименовывает файлы

Отправлено: 19:27, 07-04-2016 | #11



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

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


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


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

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


Цитата Foreigner:
Vasylich, Каждый запуск зеркально переименовывает файлы »
Зеркально не подойдет. Суть в том, чтобы после каждого срабатывания скрипта последний из списка файл становился 01.jpg, а 01.jpg - 02.jpg и т.д. Т.е. содержимое файлов сдвигалось на 1 по кругу.

Отправлено: 19:49, 07-04-2016 | #12


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


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

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


А нельзя реализовать простую логику?
1. Находим 01 файл, сохраняем его копию.
2. Переименовываем в цикле пока не достигнет конца шаблон ??.jpg: 02->01, 03->02, 04->03 ... с шагом 1 до последний->предпоследний . Конец цикла.
3. Переименовываем сохранённый в шаге 1 в последний.
Всё.

Отправлено: 20:08, 07-04-2016 | #13


Ветеран


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

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


Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

for /f %%i in ('dir /b /on *.jpg') do set /a cnt=1%%~ni-100

ren 01.jpg 01.tmp

for /l %%i in (2,1,%cnt%) do (

	set "old=0%%i"
	set /a new=%%i-1
	set "new=0!new!"

	ren !old:~-2!.jpg !new:~-2!.jpg

)

set "cnt=0%cnt%"

ren 01.tmp %cnt:~-2%.jpg
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:46, 07-04-2016 | #14


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


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

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


Цитата Foreigner:
Код: »
Получается нельзя в скрипте найти первый файл без перебора всего списка с помощью dir ?
По всей видимости в ФС файлы хранятся как попало и первый найденный не обязательно 01 и чтобы узнать, какой первый существующий в отсортированном списке нужно получить весь список и отсортировать его?

Отправлено: 21:02, 07-04-2016 | #15


Ветеран


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

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


Цитата Vasylich:
Получается нельзя в скрипте найти первый файл без перебора всего списка с помощью dir ? »
Можно. Но если прочтете выше по теме, то на FAT32 результат будет отличаться, поэтому надо сортировать. На NTFS файлы отсортируются сами (по длине строки и посимвольно). Просто попробуйте:
Код: Выделить весь код
dir /b *.jpg
на NTFS и на FAT32
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:17, 07-04-2016 | #16


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


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

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


Цитата Foreigner:
Просто попробуйте: »
Ну на fat32 пока негде попробовать. А там где будет использован скрипт - NTFS.

Отправлено: 21:27, 07-04-2016 | #17


Ветеран


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

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


Тогда dir в данном случае не принципиален.

Отправлено: 21:57, 07-04-2016 | #18


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


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

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


Цитата Foreigner:
Тогда dir в данном случае не принципиален. »
Так а первый for все-равно весь список пройдет..

Отправлено: 22:21, 07-04-2016 | #19


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo off

Set "Where=Z:\kuku"
Set "Mask=*.jpg"

SetLocal EnableExtensions EnableDelayedExpansion
Set "Last=''"

for /f "usebackq delims=" %%i in (`dir "%Where%\%Mask%" /B /O:-N /A:-D 2^>nul`) Do (
	Set "Name=%%i"
	Set /A Num=1!Name:~0,2!+1
	Set "Name=!Name:~2,9999!"
	Ren "%Where%\%%i" "!Num:~1,2!!Name!"  
	If !Last!=='' Set Last=Ren "%Where%\!Num:~1,2!!Name!" "01!Name!"
)
!Last!
Пояснение
Имена файлов могут начинаться от 01 до 99 максимум. Dir c ключом /O:-N сортирует имена файлов по имени в обратном порядке от 99 до 01. Тупо переименовываем все файлы на имя с префиксом на 1 больше. При этом 99, если он был, переименуется в 00, что за пределами диапазона имён. Для самого первого в списке переименованного файла (со старым максимальным номером) запоминаем в переменную команду на переименование его в 01. По завершении цикла запускаем эту команду.
Маску, естественно, можно указать и ??.jpg
Хватает одного цикла и не делается никаких копий.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 07-04-2016 в 23:44.

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

Отправлено: 23:01, 07-04-2016 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Переименование файлов в каталоге (.avi) dokxpi@vk Скриптовые языки администрирования Windows 15 21-05-2015 00:44
CMD/BAT - Проверка файлов в сетевом каталоге, и создание списка из тех которые по размеру < N wonted Скриптовые языки администрирования Windows 21 17-03-2014 13:40
CMD/BAT - Переименование файлов по маске tobornforlife@vk Скриптовые языки администрирования Windows 5 24-02-2014 17:07
CMD/BAT - [решено] узнать количество файлов в каталоге через CMD toro Скриптовые языки администрирования Windows 5 04-12-2013 06:31
CMD/BAT - Переименование файлов в каталоге flower Скриптовые языки администрирования Windows 2 28-11-2013 15:00




 
Переход