Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Пакетное переименование файлов в случайное имя (http://forum.oszone.net/showthread.php?t=322807)

brosafari 16-01-2017 13:40 2703922

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

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

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

megaloman 16-01-2017 18:12 2703986

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

Внизу сохранил ссылки, по которым я подсмотрел нужное для решения

brosafari 17-01-2017 17:51 2704194

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

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

megaloman 17-01-2017 21:29 2704271

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



Время: 18:45.

Время: 18:45.
© OSzone.net 2001-