Компьютерный форум 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=347168)

blacks2 29-11-2020 09:02 2941382

И снова о переименование файла с "шифровкой" расширения. (Ищу помощи).
 
Здравствуйте
Помогите с решением задачи:


Задача:
1. по указанной паке
2. всем файлам внутри неё
3. добавить префикс с последовательным номером
4. после, всем расширениям изменить расширение на рандомно-генерированное
(символы: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789, длинна 8+ регулируемая)


было:
-----
alf.doc
ball.txt
...
world.jpg


стало:
------
pr01__alf.DC4BSORY
pr02__ball.XS5RPF0O
...
pr04__world.FSAUAAQN



Спасибо!!!



*
нумерованный префикс нужен по причине того, что в папке могут быть файлы вида
w1020h2.001 w1020h2.002 w1020h2.003...
- одинаковое название + нумерованное расширение
- при смене расширения они потеряют последовательность, которую нужно сохранить
- (последовательность обычная - по цифрам/алфавиту)



**
гугление, изучение что по силам, сочетание, в течении всей ночи
дало решение в виде костыля, которому пока и папку не указать...

Кастыль
@echo off

:: переименовывание - каждый файл, добавляя префикс с нумирацией
setlocal enabledelayedexpansion
SET /A COUNT=0
FOR %%A IN (*.*) DO (
SET /A COUNT+=1
REN "%%A" "pr!COUNT!__*.*"
)

:: переименовывание - всем рандомное расширение
setlocal disableDelayedExpansion
set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for /f "eol=: delims=" %%F in ('dir /B /A-D /O:-N *.*') do call :renameFile "%%F"
exit /b

:renameFile
setlocal enableDelayedExpansion

:retry

set "name="
for /l %%N in (1 1 8) do (
set /a I=!random!%%36
for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
echo if exist *.!name! goto :retry
endlocal & ren %1 *.%name%


***
powershell?
- нет

DJ Mogarych 29-11-2020 09:57 2941385

Цитата:

Цитата blacks2
Помогите с решением задачи »

Не помогите, а сделайте за меня.

Iska 29-11-2020 10:45 2941394

blacks2, что делать, когда файлов окажется больше 99?

Цитата:

Цитата blacks2
***
powershell?
- нет »

***
- такого никогда не будет!
- будет.

megaloman 29-11-2020 11:36 2941400

blacks2,
Цитата:

Цитата Iska
что делать, когда файлов окажется больше 99? »

Переименовывать надо в исходной папке? А в ней не может быть, что существуют переименованные ранее файлы, и те которые не переименованы?

alpap 29-11-2020 18:45 2941439

Цитата:

Цитата blacks2
всем расширениям изменить расширение на рандомно-генерированное
»

Цитата:

Цитата blacks2
файлы вида w1020h2.001 w1020h2.002 w1020h2.003...
- при смене расширения они потеряют последовательность, которую нужно сохранить
»

теперь взгляд программиста
все расширения менять на рандом нельзя
добавлять ко всем рандомным префиксам в конце (иначе не будет правильной сортировки) родное расширение - тогда смысл в этом рандоме
искать возможные варианты: .001, .002, ; .1, .2, ; .aaa, .bbb, .ccc, ; .a1, a2, ; - список бесконечен
------
+ вопросы выше в силе
++ а какого лешего это надо или скажем именно так надо или какая конечная цель (идея) должна быть достигнута сим действом?

megaloman 29-11-2020 18:53 2941440

alpap, blacks2,
Цитата:

Цитата alpap
все расширения менять на рандом нельзя »

ИМХО, грамотнЕе, не вдаваясь в глубинный смысл сего действа, брать имя файл.раширение и приделывать к нему префикс_файл.раширение.рандом, по крайней мере, не сжигаем мосты, можно назад вернуться.
blacks2, кстати, после префикса сколько штук "_", у Вас 2 - это так задумано?

megaloman 29-11-2020 20:02 2941451

Цитата:

Цитата megaloman
брать имя файл.раширение и приделывать к нему префикс_файл.раширение.рандом »

Код:

@Echo Off
cls
        Set "BoxIn=Z:\Box_In"
        Set "Pref=Pr"
        Set /A N=100
        Set "Delim=_"

        FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\*.*" /B /O:N /A:-D ^|FINDSTR /I /V /R /C:"^%Pref%[0-9]*%Delim%.*$"`) DO (
                Set /A N+=1
                Call :RandStr 8 "RStr"
                Call Ren "%BoxIn%\%%f" "%Pref%%%N:~1%%%Delim%%%f.%%RStr%%"
        )
Pause
Exit /B

:RandStr
        SetLocal EnableDelayedExpansion

        Set "Symb=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        Set /A N=36

        Set /A min=0, max=%N%-1

        Set "Out="
        Set /A j=!random!
        FOR /L %%i IN (1,1,%1) DO (
                Set /A j=%min%+^(%max%-%min%+1^)*!random!/32768
                Call Set "Out=!Out!%%Symb:~!j!,1%%"
        )
        EndLocal DisableDelayedExpansion &Set "%~2=%Out%"
Exit /B

Задайте свой путь в Set "BoxIn=Z:\Box_In", префикс Set "Pref=Pr", число знаков в номере префикса Set /A N=100 (здесь будет 2 знака), разделитель префикса и имени Set "Delim=_"
В процедурке
Call :RandStr 8 "RStr"
8 - число генерируемых случайных символов, можете его менять
Противу своего ощущения, ежели очень хочется уничтожить исходное расширение, вот вариант строки с переименованием
Код:

                Call Ren "%BoxIn%\%%f" "%Pref%%%N:~1%%%Delim%%%~nf.%%RStr%%"

alpap 29-11-2020 20:35 2941457

Цитата:

Цитата megaloman
приделывать к нему префикс_файл.раширение.рандом »

так себе вариант
- во-первых сокрытием тут уже и не пахнет
- во-вторых (писал выше) сортировки при *.001[рандом], *.002[рандом], - не будет, а по задаче нужна (или из двух зол ... ?).

megaloman 29-11-2020 20:52 2941464

Цитата:

Цитата alpap
- во-первых сокрытием тут уже и не пахнет »

я не видел требования сокрытия. Видел требуемый результат:
Цитата:

Цитата blacks2
было:
-----
alf.doc
ball.txt
...
world.jpg
стало:
------
pr01__alf.DC4BSORY
pr02__ball.XS5RPF0O
...
pr04__world.FSAUAAQN »

Меня не устроила необратимость этого действа.
Цитата:

Цитата alpap
- во-вторых (писал выше) сортировки при *.001[рандом], *.002[рандом], - не будет »

При чтении исходных имен по алфавиту и добавления префикса с номером в формате с лидирующими нулями алфавитная последовательность нарушена не будет, при условии, что файлов не более 99 при двух знаках на номер в префиксе.

blacks2 29-11-2020 23:23 2941481

Цитата:

Цитата DJ Mogarych
Не помогите, а сделайте за меня. »

Благодарю за замечание ). Самому совестно.
Но, если прочтете вопрос внимательно,
там есть готовый рабочий пример-кастыль.
Так что сделать "наотмашь" тут не подходит.
Я правда старался и изучал вопрос.




Цитата:

Цитата Iska
что делать, когда файлов окажется больше 99? »

Блин, об том позабыл сказать... хоть мне и попадались строки ограничения/доп генерации..
Ответ: по факту файлов будет 15-30 максимум.

* шифровать весь диск/фото архивы =) - не предусматривается
Конечно веселее когда возможностей больше, но если по необходимости 15-30 файлов




Цитата:

Цитата megaloman
Переименовывать надо в исходной папке? А в ней не может быть, что существуют переименованные ранее файлы, и те которые не переименованы? »

- по указанной папке, вне исполняемого файла cmd
- нет не может, все файлы девственно чисты, только что созданные

* замечу что пример-кастыль, переименовывает уже переименованные расширения



Цитата:

Цитата alpap
добавлять ко всем рандомным префиксам в конце (иначе не будет правильной сортировки) родное расширение »

- сортировка идет по названию файла - префиксу
- исходник: blabla.txt
- добавляется префикс pr01_blabla.txt == уже есть сортировка по алфвиту
- далее меняется расширение на рандом == сортировка остается по префиксу-алфавиту, не смотря на рандомное расширение

* конечно это всё работает если установка префикса pr01_ pr02_ идтет относительно, по умолчанию, алфавитной последовательности добавление префиксов



Цитата:

Цитата alpap
какого лешего это надо или скажем именно так надо или какая конечная цель (идея) должна быть достигнута сим действом? »

Вы правы, но я бы немного переиначил: "какого чёрта?" - да, меня именно леший-чёрт попутал:
Домашний бекапер на cmd, подумал хорошей параноид-доп защитой от шифровальщиков будет сменить расширение файлам
Почитал инфу по вирусам - те в основном ищут файлы по расширению.
Поизучал какие расширения ищут - подумал что будет не лишним добавить подмену

nas, облака, распределенные бекапы - знаю. понимаю. давно пользую.
и понимаю, что алгоритмы могут заглянуть внутрь файла и вытаскивать оттуда что то за файл
но то, для них, дополнительная нагрузка на поиск-анализ и в основном все работают по расширению.

лучше что-то сделать, чем ничего...
а то, как у одного моего клиента, на рабоче столе 2 файла: "пароли.doc" "пароли бухалтерия.doc"...
плюс всегда есть доп плюшки если совсем параноить (зашифровать файл, убрать метки)

* замечу что просто убрать расширение файла зачастую не помогает




Цитата:

Цитата megaloman
префикс_файл.раширение.рандом, по крайней мере, не сжигаем мосты, можно назад вернуться »

Согласен. Да. Также думал над вариантом.
- думаю по факту расширения будут все одни (на худой конец папка по формату-расширению файлами)
- на всяк случай подстраховался на *.*

плюс с моими знаниями cmd, пока бы с ядром разобраться, после уже можно расширения переводить в переменные, менять местами, шифровать...
а искать помощи у вас, уважаемого форума, о дополнительных няштяках - не правильно
и файлы... в общем должны выглядеть так, словно по ним прошелся шифровальщик (провокация его на зацикленность)



Цитата:

Цитата megaloman
Задайте свой путь »

Благодарю!! :good:
В ближайшее время буду изучать.



Цитата:

Цитата alpap
во-первых сокрытием тут уже и не пахнет »

от человеческих глаз, от автора файлов - конечно же нет
одно сохранённое названия файла - какое тут уже сокрытие =) ?
и в тушку файла всегда можно глянуть...




Цитата:

Цитата megaloman
я не видел требования сокрытия. Видел требуемый результат: »

+
Цитата:

Цитата megaloman
Меня не устроила необратимость этого действа. »

:sorry:
Цитата:

Цитата megaloman
При чтении исходных имен по алфавиту и добавления префикса с номером в формате с лидирующими нулями алфавитрая последовательность нарушена не будет. »

Да, всё верно.


Время: 18:15.

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