PDA

Показать полную графическую версию : [решено] Пакетное переименование файлов в случайное имя


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

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

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

megaloman
16-01-2017, 18:12
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Внизу сохранил ссылки, по которым я подсмотрел нужное для решения

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

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

megaloman
17-01-2017, 21:29
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




© OSzone.net 2001-2012