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

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

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

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


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

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


Помогите пожалуйста, есть большое количество папок с картинками. Нужно переименовать их в рандомные имена:
символы, цифры, регистр, длина - всё рандомно. Можно так сделать через батник?

Пример:
sd32jsd2.jpg
owi2.jpg
wbj22sdHsjhJ.jpg

Заранее огромное спасибо. Уже всё перерыл((

Отправлено: 13:40, 16-01-2017

 

Ветеран


Contributor


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

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


brosafari,
Цитата brosafari:
есть большое количество папок с картинками
- не конкретно. Я предположил, что есть некая папка BoxIn, в ней есть подпапки. В этой папке и подпапках есть файлы jpg, которые надо переименовать.
Я задал набор символов (67 штук), которые будут участвовать в именах файлов.
Задал максимальное и минимальное число символов в имени файла.
Вот решение в этих предположениях
Код: Выделить весь код
@echo off
cls

Set "BoxIn=Z:\Box_In"
Set "Mask=*.jpg"

Set "Sym=1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM@#$_-"

Set /A M=67+1

Set /A Nmax=20
Set /A Nmin=8

Set "RanDir=%BoxIn%\%Random%%Random%%Random%%Random%"
Md %RanDir% 

SetLocal EnableExtensions EnableDelayedExpansion

For /f "usebackq delims=" %%f in (`Dir "%BoxIn%\%Mask%" /B /A:-D 2^>nul`) Do Call :ReMove "%BoxIn%\%%f"
Move "%RanDir%\*.*" "%BoxIn%\"  >nul 2>nul

For /f "usebackq delims=" %%d in (`Dir "%BoxIn%\" /S /B /A:D 2^>nul`) Do (
	If /I Not "%%d"=="%RanDir%" (
		For /f "usebackq delims=" %%f in (`Dir "%%d\%Mask%" /B /A:-D 2^>nul`) Do Call :ReMove "%%d\%%f"
		Move "%RanDir%\*.*" "%%d\"  >nul 2>nul
	)
)

Rd "%RanDir%"
GoTo :Eof

:ReMove
	Set "SS="
	Set /A N=!random!%%(%Nmax%-%Nmin%+1)+%Nmin%

	FOR /L %%i IN (1,1,!N!) DO (
		Set /A R=!Random!%%%M%
		Call Set "S1=%%Sym:~!R!,1%%"
		Set "SS=!SS!!S1!"
	)
	Move %1 "%RanDir%\!SS!%~x1" >nul
GoTo :Eof

rem http://www.cyberforum.ru/cmd-bat/thread1740345.html#post9165900
rem http://www.celitel.info/klad/nhelp/helpbat.php?dcmd=ex_string
Внизу сохранил ссылки, по которым я подсмотрел нужное для решения

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


Последний раз редактировалось megaloman, 17-01-2017 в 21:40.

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

Отправлено: 18:12, 16-01-2017 | #2



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

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


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


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

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


Спасибо огромное! Видимо это то что нужно, но я немного туповат(( как бы создать батник слава богу могу, но при нажатий - появляется командная строка и сразу исчезает. В итоге ничего не изменилось.

Скажите пожалуйста, как правильно его юзать? Спасибо.

Отправлено: 17:51, 17-01-2017 | #3


Ветеран


Contributor


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

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


brosafari, Возможно, Вы не указали путь к обрабатываемой папке:
Set "BoxIn=Z:\Box_In" - здесь надо вместо Z:\Box_In написать свой путь.
Если батник находится в обрабатываемой папке, то вот решение, здесь, естественно, путь указывать не надо
Код: Выделить весь код
@echo off
cls

Set "Mask=*.jpg"

Set "BoxIn=%~dp0"
Set "BoxIn=%BoxIn:~0,-1%"

Set "Sym=1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM@#$_-"

Set /A M=67+1

Set /A Nmax=20
Set /A Nmin=8

Set "RanDir=%BoxIn%\%Random%%Random%%Random%%Random%"
Md %RanDir% 

SetLocal EnableExtensions EnableDelayedExpansion

For /f "usebackq delims=" %%f in (`Dir "%BoxIn%\%Mask%" /B /A:-D 2^>nul`) Do Call :ReMove "%BoxIn%\%%f"
Move "%RanDir%\*.*" "%BoxIn%\"  >nul

For /f "usebackq delims=" %%d in (`Dir "%BoxIn%\" /S /B /A:D 2^>nul`) Do (
	If /I Not "%%d"=="%RanDir%" (
		For /f "usebackq delims=" %%f in (`Dir "%%d\%Mask%" /B /A:-D 2^>nul`) Do Call :ReMove "%%d\%%f"
		Move "%RanDir%\*.*" "%%d\"  >nul
	)
)

Rd "%RanDir%"
GoTo :Eof

:ReMove
	Set "SS="
	Set /A N=!random!%%(%Nmax%-%Nmin%+1)+%Nmin%

	FOR /L %%i IN (1,1,!N!) DO (
		Set /A R=!Random!%%%M%
		Call Set "S1=%%Sym:~!R!,1%%"
		Set "SS=!SS!!S1!"
	)
	Move %1 "%RanDir%\!SS!%~x1" >nul
GoTo :Eof

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


Последний раз редактировалось megaloman, 17-01-2017 в 21:38.

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

Отправлено: 21:29, 17-01-2017 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Пакетное переименование файлов по маске Viktor99 Скриптовые языки администрирования Windows 1 15-08-2016 23:25
CMD/BAT - [решено] Пакетное переименование файлов ArsenBespalov Скриптовые языки администрирования Windows 9 11-08-2016 03:56
Любой язык - [решено] Пакетное переименование файлов с отсечением лишнего в имени. LukAleX Скриптовые языки администрирования Windows 3 01-08-2016 11:16
CMD/BAT - [решено] Пакетное переименование файлов (синхронизирование имён одного расширения с другим) 19w85 Скриптовые языки администрирования Windows 13 04-10-2013 22:02
CMD/BAT - [решено] Пакетное переименование с создание сложных имён файлов alexmoreman Скриптовые языки администрирования Windows 4 28-11-2011 02:27




 
Переход