Показать полную графическую версию : [решено] И снова о переименование файла с "шифровкой" расширения. (Ищу помощи).
Здравствуйте
Помогите с решением задачи:
Задача:
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
Помогите с решением задачи »
Не помогите, а сделайте за меня.
blacks2, что делать, когда файлов окажется больше 99?
***
powershell?
- нет »
***
- такого никогда не будет!
- будет.
megaloman
29-11-2020, 11:36
blacks2, что делать, когда файлов окажется больше 99? »Переименовывать надо в исходной папке? А в ней не может быть, что существуют переименованные ранее файлы, и те которые не переименованы?
всем расширениям изменить расширение на рандомно-генерированное
»
файлы вида w1020h2.001 w1020h2.002 w1020h2.003...
- при смене расширения они потеряют последовательность, которую нужно сохранить
»
теперь взгляд программиста
все расширения менять на рандом нельзя
добавлять ко всем рандомным префиксам в конце (иначе не будет правильной сортировки) родное расширение - тогда смысл в этом рандоме
искать возможные варианты: .001, .002, ; .1, .2, ; .aaa, .bbb, .ccc, ; .a1, a2, ; - список бесконечен
------
+ вопросы выше в силе
++ а какого лешего это надо или скажем именно так надо или какая конечная цель (идея) должна быть достигнута сим действом?
megaloman
29-11-2020, 18:53
alpap, blacks2, все расширения менять на рандом нельзя » ИМХО, грамотнЕе, не вдаваясь в глубинный смысл сего действа, брать имя файл.раширение и приделывать к нему префикс_файл.раширение.рандом, по крайней мере, не сжигаем мосты, можно назад вернуться.
blacks2, кстати, после префикса сколько штук "_", у Вас 2 - это так задумано?
megaloman
29-11-2020, 20:02
брать имя файл.раширение и приделывать к нему префикс_файл.раширение.рандом »
@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%%"
приделывать к нему префикс_файл.раширение.рандом »
так себе вариант
- во-первых сокрытием тут уже и не пахнет
- во-вторых (писал выше) сортировки при *.001[рандом], *.002[рандом], - не будет, а по задаче нужна (или из двух зол ... ?).
megaloman
29-11-2020, 20:52
- во-первых сокрытием тут уже и не пахнет » я не видел требования сокрытия. Видел требуемый результат:было:
-----
alf.doc
ball.txt
...
world.jpg
стало:
------
pr01__alf.DC4BSORY
pr02__ball.XS5RPF0O
...
pr04__world.FSAUAAQN »
Меня не устроила необратимость этого действа.
- во-вторых (писал выше) сортировки при *.001[рандом], *.002[рандом], - не будет »
При чтении исходных имен по алфавиту и добавления префикса с номером в формате с лидирующими нулями алфавитная последовательность нарушена не будет, при условии, что файлов не более 99 при двух знаках на номер в префиксе.
Не помогите, а сделайте за меня. »
Благодарю за замечание ). Самому совестно.
Но, если прочтете вопрос внимательно,
там есть готовый рабочий пример-кастыль.
Так что сделать "наотмашь" тут не подходит.
Я правда старался и изучал вопрос.
что делать, когда файлов окажется больше 99? »
Блин, об том позабыл сказать... хоть мне и попадались строки ограничения/доп генерации..
Ответ: по факту файлов будет 15-30 максимум.
* шифровать весь диск/фото архивы =) - не предусматривается
Конечно веселее когда возможностей больше, но если по необходимости 15-30 файлов
Переименовывать надо в исходной папке? А в ней не может быть, что существуют переименованные ранее файлы, и те которые не переименованы? »
- по указанной папке, вне исполняемого файла cmd
- нет не может, все файлы девственно чисты, только что созданные
* замечу что пример-кастыль, переименовывает уже переименованные расширения
добавлять ко всем рандомным префиксам в конце (иначе не будет правильной сортировки) родное расширение »
- сортировка идет по названию файла - префиксу
- исходник: blabla.txt
- добавляется префикс pr01_blabla.txt == уже есть сортировка по алфвиту
- далее меняется расширение на рандом == сортировка остается по префиксу-алфавиту, не смотря на рандомное расширение
* конечно это всё работает если установка префикса pr01_ pr02_ идтет относительно, по умолчанию, алфавитной последовательности добавление префиксов
какого лешего это надо или скажем именно так надо или какая конечная цель (идея) должна быть достигнута сим действом? »
Вы правы, но я бы немного переиначил: "какого чёрта?" - да, меня именно леший-чёрт попутал:
Домашний бекапер на cmd, подумал хорошей параноид-доп защитой от шифровальщиков будет сменить расширение файлам
Почитал инфу по вирусам - те в основном ищут файлы по расширению.
Поизучал какие расширения ищут - подумал что будет не лишним добавить подмену
nas, облака, распределенные бекапы - знаю. понимаю. давно пользую.
и понимаю, что алгоритмы могут заглянуть внутрь файла и вытаскивать оттуда что то за файл
но то, для них, дополнительная нагрузка на поиск-анализ и в основном все работают по расширению.
лучше что-то сделать, чем ничего...
а то, как у одного моего клиента, на рабоче столе 2 файла: "пароли.doc" "пароли бухалтерия.doc"...
плюс всегда есть доп плюшки если совсем параноить (зашифровать файл, убрать метки)
* замечу что просто убрать расширение файла зачастую не помогает
префикс_файл.раширение.рандом, по крайней мере, не сжигаем мосты, можно назад вернуться »
Согласен. Да. Также думал над вариантом.
- думаю по факту расширения будут все одни (на худой конец папка по формату-расширению файлами)
- на всяк случай подстраховался на *.*
плюс с моими знаниями cmd, пока бы с ядром разобраться, после уже можно расширения переводить в переменные, менять местами, шифровать...
а искать помощи у вас, уважаемого форума, о дополнительных няштяках - не правильно
и файлы... в общем должны выглядеть так, словно по ним прошелся шифровальщик (провокация его на зацикленность)
Задайте свой путь »
Благодарю!! :good:
В ближайшее время буду изучать.
во-первых сокрытием тут уже и не пахнет »
от человеческих глаз, от автора файлов - конечно же нет
одно сохранённое названия файла - какое тут уже сокрытие =) ?
и в тушку файла всегда можно глянуть...
я не видел требования сокрытия. Видел требуемый результат: »
+
Меня не устроила необратимость этого действа. »
:sorry:
При чтении исходных имен по алфавиту и добавления префикса с номером в формате с лидирующими нулями алфавитрая последовательность нарушена не будет. »
Да, всё верно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.