|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Переименование указанного количества файлов следуя нумерации |
|
Любой язык - [решено] Переименование указанного количества файлов следуя нумерации
|
Ветеран Сообщения: 531 |
Профиль | Отправить PM | Цитировать
Здравствуйте. Есть ли способ переименовать заданное количество файлов в указанной папке, продолжая нумерацию и названия файлов, присутствующих в папке?
К примеру в папке 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
|
Профиль | Отправить PM | Цитировать Здравствуйте.
Помогите! Есть ли в вашей практике вариант bat файла для запуска в директории с файлами, которые надо пронумеровать. Добавить номер перед именем файла (не меняя его), например: 001 имя.txt (здесь пробел между номером и именем файла) и т.д. до 150, не зависимо от количества фалов в директории. Нумеруются строго 150 файлов. Если их < 150, заканчивает работу. Если их >150, нумерует 150 и заканчивает работу. Если в числе нумеруемых файлов попадаются файлы уже пронумерованные, то их номера заменяются на текущие. Спасибо! |
Отправлено: 21:00, 17-11-2017 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Georgio
Здравствуйте. Помогите! Есть ли в вашей практике вариант bat файла для запуска в директории с файлами, которые надо пронумеровать. Добавить номер перед именем файла (не меняя его), например: 001 имя.txt (здесь пробел между номером и именем файла) и т.д. до 150, не зависимо от количества фалов в директории. Нумеруются строго 150 файлов. Если их < 150, заканчивает работу. Если их >150, нумерует 150 и заканчивает работу. Если в числе нумеруемых файлов попадаются файлы уже пронумерованные, то их номера заменяются на текущие. Спасибо! |
Отправлено: 22:03, 17-11-2017 | #12 |
Ветеран Сообщения: 531
|
Профиль | Отправить 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 |
Отправлено: 05:33, 07-07-2019 | #13 |
Ветеран Сообщения: 531
|
Профиль | Отправить PM | Цитировать Если для BAT это не корректно, может есть решение для PowerShell (поменял, на "Любой язык").
|
Отправлено: 11:04, 07-07-2019 | #14 |
Ветеран Сообщения: 2708
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Спасибо, попробовал убрать, первый for, потом второй.
Но в обоих случаях переименовываются сами файлы start. Видимо нужно было конкретнее написать.. Скрипт не должен их трогать, переименовывать нужно только другие файлы (все, кроме start****). Необходимо продолжить нумерацию вперед, не принимая во внимание предыдущую нумерацию. Т.е. найти самый последний номер (самый большой) и продолжить от него нумерацию. например было: Мы задаем количество - 2 файла для переименования (нужно обязательно указывать нужное количество, чтобы не переименовывалось все) стало: Переименовались: 00uyjkskh.wmv > start0059.wmv ljsfdhgsjkd.avi > start0060.avi Файлы start0056.mp4, start0057.avi, start0058.wmw остались неизменными. Файлы, которые переименовываются, могут переименовываться в любой последовательности, не обязательно по алфавиту, главное, чтобы не переименовывались файлы start****, переименовываться должны все другие (точнее не все, а указанное мной количество. |
Отправлено: 12:50, 07-07-2019 | #16 |
Ветеран Сообщения: 2708
|
Профиль | Отправить 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 |
------- Последний раз редактировалось megaloman, 07-07-2019 в 16:00. Отправлено: 13:59, 07-07-2019 | #17 |
Ветеран Сообщения: 531
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:16, 07-07-2019 | #18 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Alexander_88, я стремлюсь, чтобы все исходные данные были в одном месте, так что, только здесь и один раз.
|
------- Отправлено: 17:22, 07-07-2019 | #19 |
Ветеран Сообщения: 531
|
Профиль | Отправить 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Удаление файлов старше 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 |
|