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

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

Ответить
Настройки темы
Любой язык - [решено] Переименование указанного количества файлов следуя нумерации

Ветеран


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

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


Изменения
Автор: Alexander_88
Дата: 07-07-2019
Здравствуйте. Есть ли способ переименовать заданное количество файлов в указанной папке, продолжая нумерацию и названия файлов, присутствующих в папке?
К примеру в папке 30 файлов, 10 файлов вида 0001start.avi, 0002start.wmv, 0003start.avi - 0010start.mpg, остальные 20 имеют различные названия. Я задал количество 20 файлов. Можно ли сделать так, чтобы код переименовывал файлы имеющие различные названия, продолжая нумерацию и повторяя название имеющимся, т.е. в данном примере 20 файлов должны переименоваться на 0011start.*, 0012start.*, 0013start.* - 0030start.*. Известно, что нумерация всегда четырехзначная, слова после нумерации в одной папке всегда одинаковы (но они могут быть не только "start"), расширения могут быть различные (видео файлы) Нумерация может быть не с еденицы, к примеру с 0546stop.* 0547stop.*

Отправлено: 21:17, 23-08-2014

 

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


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

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


Здравствуйте.
Помогите! Есть ли в вашей практике вариант bat файла для запуска в директории с файлами, которые надо пронумеровать.
Добавить номер перед именем файла (не меняя его), например: 001 имя.txt (здесь пробел между номером и именем файла) и т.д. до 150,
не зависимо от количества фалов в директории. Нумеруются строго 150 файлов. Если их < 150, заканчивает работу.
Если их >150, нумерует 150 и заканчивает работу. Если в числе нумеруемых файлов попадаются файлы уже пронумерованные,
то их номера заменяются на текущие.
Спасибо!

Отправлено: 21:00, 17-11-2017 | #11



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

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


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


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

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


Georgio
Здравствуйте.
Помогите! Есть ли в вашей практике вариант bat файла для запуска в директории с файлами, которые надо пронумеровать.
Добавить номер перед именем файла (не меняя его), например: 001 имя.txt (здесь пробел между номером и именем файла) и т.д. до 150,
не зависимо от количества фалов в директории. Нумеруются строго 150 файлов. Если их < 150, заканчивает работу.
Если их >150, нумерует 150 и заканчивает работу. Если в числе нумеруемых файлов попадаются файлы уже пронумерованные,
то их номера заменяются на текущие.
Спасибо!

Отправлено: 22:03, 17-11-2017 | #12


Ветеран


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

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


Здравствуйте.. опять потревожила эта задача с наименованиями типа start0001, start0002 (цифры в конце). Может есть, кто в курсе темы?
Делаю так (пытаюсь хотя бы файл переименовать):

Код: Выделить весь код
@echo off
chcp 1251>nul

set number=1
set "folder=G:\03 start"

set "reg_exp=^start[0-9][0-9][0-9][0-9]\...*"
for /f "delims=" %%? in ('
 dir /a-d/b/o-n "%folder%\start*.*"^| findstr /ir "%reg_exp%"
') do (
 set max=%%?
 goto:#
 )

:#
set count=1%max:~,4%
for /f "delims=" %%? in ('
 dir /a-d/b "%folder%"^| findstr /irv "%reg_exp%"
') do (
 set /a count_2+=1
 for /f %%* in ('
  set /a count_2
 ') do (
  if %%* leq %number% (
   set /a count+=1
   call ren "%folder%\%%?" "start%%count:~1%%%%~x?"
   ) else (
   exit /b
   )
  )
 )
exit /b
файл переименовывается в start.. но цифры в конце не добавляются(( Может кто - то знает, что еще исправить, чтобы заработало?

Отправлено: 05:33, 07-07-2019 | #13


Ветеран


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

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


Если для BAT это не корректно, может есть решение для PowerShell (поменял, на "Любой язык").

Отправлено: 11:04, 07-07-2019 | #14


Ветеран


Contributor


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

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


Alexander_88, Вот вариант
Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
 
	Set "BoxIn=Z:\Soft_In"
	Set "Kword=start"
	Set "Reg=^%Kword%[0-9][0-9][0-9][0-9]\..*"
	Set /A M=4

	Set "Mask=*.*"
	Set /A Max=25	
	
	Set /A Num=1000000
	Set /A MMax=%Max%+%Num%
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%BoxIn%\%Kword%*.*" /B /O:N /A:-D ^|findstr /I /R /C:"%Reg%"`) DO (
		Call :RenNNN "%BoxIn%" "%%a" "%Kword%" %M% %MMax% ||Exit /B 1
	)

	Set /A Num=1000000
	Set /A MMax=%Max%+%Num%
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /O:N /A:-D`) DO (
		Call :RenNNN "%BoxIn%" "%%a" "%Kword%" %M% %MMax% ||Exit /B 1 
	)
Pause
Exit /B

:RenNNN
	Set /A Num+=1
	If %Num% GTR %5 Exit /B 1 
	Call Set "NNum=%%Num:~-%4%%"
	2>nul Ren "%~1\%~2" "%~3%NNum%%~x2" ||GoTo :RenNNN
Exit /B 0
Как это организовано:
В первом For просматриваем файлы startNNNN.* и перенумеровываем их вподряд start0001, start0002 ...
Во втором For переименовываем все остальные файлы по указанной маске в start c последующими номерами
Если этого не нужно, этот for надо или заремить, или убрать

Есть возможность ограничить число переименований файлов (Set /A Max=25)
Если этого не надо, можно задать заведомо большое число, или заремить If %Num% GTR %5 Exit /B 1
То же для NNNNstart.*
Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
 
	Set "BoxIn=Z:\Soft_In"
	Set "Kword=start"
	Set "Reg=^[0-9][0-9][0-9][0-9]%Kword%\..*"
	Set /A M=4

	Set "Mask=*.*"
	Set /A Max=25	
	
	Set /A Num=1000000
	Set /A MMax=%Max%+%Num%
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%BoxIn%\%Kword%*.*" /B /A:-D ^|findstr /I /R /C:"%Reg%"`) DO (
		Call :RenNNN "%BoxIn%" "%%a" "%Kword%" %M% %MMax% ||Exit /B 1
	)

	Set /A Num=1000000
	Set /A MMax=%Max%+%Num%
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D`) DO (
		Call :RenNNN "%BoxIn%" "%%a" "%Kword%" %M% %MMax% ||Exit /B 1 
	)
Pause
Exit /B

:RenNNN
	Set /A Num+=1
	If %Num% GTR %5 Exit /B 1 
	Call Set "NNum=%%Num:~-%4%%"
	2>nul Ren "%~1\%~2" "%NNum%%~3%~x2" ||GoTo :RenNNN
Exit /B 0

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


Последний раз редактировалось megaloman, 07-07-2019 в 14:40.

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

Отправлено: 11:20, 07-07-2019 | #15


Ветеран


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

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


Спасибо, попробовал убрать, первый for, потом второй.
Но в обоих случаях переименовываются сами файлы start. Видимо нужно было конкретнее написать.. Скрипт не должен их трогать, переименовывать нужно только другие файлы (все, кроме start****). Необходимо продолжить нумерацию вперед, не принимая во внимание предыдущую нумерацию. Т.е. найти самый последний номер (самый большой) и продолжить от него нумерацию.

например было:
Код: Выделить весь код
00uyjkskh.wmv
start0056.mp4
start0057.avi
start0058.wmw
ljsfdhgsjkd.avi
ziyxvyz.mpg
Мы задаем количество - 2 файла для переименования (нужно обязательно указывать нужное количество, чтобы не переименовывалось все)

стало:
Код: Выделить весь код
start0056.mp4
start0057.avi
start0058.wmw
start0059.wmv
start0060.avi
ziyxvyz.mpg
Переименовались:
00uyjkskh.wmv > start0059.wmv
ljsfdhgsjkd.avi > start0060.avi

Файлы start0056.mp4, start0057.avi, start0058.wmw остались неизменными.

Файлы, которые переименовываются, могут переименовываться в любой последовательности, не обязательно по алфавиту, главное, чтобы не переименовывались файлы start****, переименовываться должны все другие (точнее не все, а указанное мной количество.

Отправлено: 12:50, 07-07-2019 | #16


Ветеран


Contributor


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

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


Alexander_88, Предыдущий вариант переименовывает все файлы, нумерацию делает с 1. Сделано в условиях нечеткой постановки. Если надо продолжить нумерацию, и не обращать внимание, есть ли там прорехи, и переименовать нужное кол-во файлов, вот вариант:
Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
 
	Set "BoxIn=Z:\Soft_In"
	Set "Kword=start"
	Set "Reg=^%Kword%[0-9][0-9][0-9][0-9]\..*"
	Set /A M=4

	Set "Mask=*.*"
	Set /A Max=2

	Set /A NMax=0	
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%BoxIn%\%Kword%*.*" /B /O:N /A:-D ^|findstr /I /R /C:"%Reg%"`) DO (
		Set "NMax=%%~na"
		Call Set "NMax=1%%NMax:~-%M%%%"
	)

	Set /A Num=1000000
	Set /A Num=%Num%+%NMax% 
	Set /A MMax=%Max%+%Num%

	Set /A MMax=%Max%+%Num%
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /O:N /A:-D ^|findstr /I /R /V /C:"%Reg%"`) DO (
		Call :RenNNN "%BoxIn%" "%%a" "%Kword%" %M% %MMax% ||Exit /B 1 
	)
Pause
Exit /B

:RenNNN
	Set /A Num+=1
	If %Num% GTR %5 Exit /B 1 
	Call Set "NNum=%%Num:~-%4%%"
	2>nul Ren "%~1\%~2" "%~3%NNum%%~x2" ||GoTo :RenNNN
Exit /B 0
Первый For ищет максимальный номер, во втором - переименовываются остальные файлы (заданное количество)

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


Последний раз редактировалось megaloman, 07-07-2019 в 16:00.

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

Отправлено: 13:59, 07-07-2019 | #17


Ветеран


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

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


Спасибо, все работает, а количество задавать только здесь?
Код: Выделить весь код
Set /A Max=2
больше нигде не надо?

Отправлено: 17:16, 07-07-2019 | #18


Ветеран


Contributor


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

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


Alexander_88, я стремлюсь, чтобы все исходные данные были в одном месте, так что, только здесь и один раз.

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

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

Отправлено: 17:22, 07-07-2019 | #19


Ветеран


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

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


а не подскажете вариант (на всякий случай) для NNNNstart ?

Поменял, но видимо, что то еще надо изменить, файлы переименовываются, но нету продолжения от максимального номера.. переименовывается с 0001start

Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251
 
	Set "BoxIn=F:\01 start"
	Set "Kword=start"
	Set "Reg=^[0-9][0-9][0-9][0-9]%Kword%\..*"
	Set /A M=4

	Set "Mask=*.*"
	Set /A Max=1

	Set /A NMax=0	
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%BoxIn%\*%Kword%.*" /B /A:-D ^|findstr /I /R /C:"%Reg%"`) DO (
		Set "NMax=%%~na"
		Call Set "NMax=1%%NMax:~-%M%%%"
	)

	Set /A Num=1000000
	Set /A Num=%Num%+%NMax% 
	Set /A MMax=%Max%+%Num%

	Set /A MMax=%Max%+%Num%
	FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D ^|findstr /I /R /V /C:"%Reg%"`) DO (
		Call :RenNNN "%BoxIn%" "%%a" "%Kword%" %M% %MMax% ||Exit /B 1 
	)
Pause
Exit /B

:RenNNN
	Set /A Num+=1
	If %Num% GTR %5 Exit /B 1 
	Call Set "NNum=%%Num:~-%4%%"
	2>nul Ren "%~1\%~2" "%NNum%%~3%~x2" ||GoTo :RenNNN
Exit /B 0

Отправлено: 05:56, 08-07-2019 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Удаление файлов старше 5 дней кроме указанного по имени. Joni Скриптовые языки администрирования Windows 6 11-07-2012 11:18
VBS/WSH/JS - Подсчет количества ini файлов в папке XXXp Скриптовые языки администрирования Windows 14 10-04-2012 02:06
CMD/BAT - [решено] Счетчик количества файлов Arsenik77 Скриптовые языки администрирования Windows 1 28-08-2011 11:13
Удаление файлов из списка указанного в txt blacks2 Вебмастеру 28 02-09-2009 20:09
Интерфейс - [решено] Переименование большого количества файлов 7human7 Microsoft Windows 2000/XP 7 22-11-2008 09:48




 
Переход