BAT/CMD: Shred и Random Renamer
1. Shred для Windows (копия)
2. Устранил финальный недостаток SHRED под Windows в BAT-файле (копия)
3. Random Renamer (копия)
В [2] описал недостаток утилиты
shred
, а именно: затирая файл она никак не меняет его имени, потому, если вы shred‘ом удалили файл, например, с именем Путин бомба взрыв чеченцы.doc
, содержимое файла затрется, а название останется.Впрочем, там же описал недостаток и получения случайного имени файла стандартными средствами BAT/CMD: Имя временного файла весьма характерное, при анализе диска будет видно, что кто-то скриптом пользовался. Как сделать нормальные случайные имена файлов в CMD (вида
lfcx16.tmp
, например) без внешних утилит, я пока не понял.Впрочем, да, без PowerShell или JS/VBS стандартными средствами CMD/BAT получить нормальное случайное имя файла сложно, так что написал простенькую утилиту Random Renamer [3], которую, впрочем, писал немного для другого, но в [3] обещал пример, как ее можно использовать со
shred
в BAT-файле.1. Отключаем режим вывода команд:
@echo off
2. Проверяем, чтобы в первом параметре BAT-файла были указаны маска или имя файла, иначе насерет в консоль ошибками и будет некрасиво:
IF "%1" EQU "" goto paramerr
3. В конце BAT-файла дописываем метку
:paramerr
и вывод сообщения об ошибке::paramerr
echo First parameter must be file name or file mask!
echo e.g. rrshred.bat *.txt
echo e.g. rrshred.bat text.txt
4. Генерируем имя для списка файлов, которые будут переименованы и обработаны
shred
:set RLST=%TEMP%\%RANDOM%.%RANDOM%
5. Переименовываем файлы в текущем каталоге Random Renamer'ом и отправляем вывод RR в список файлов:
rr -m %1 -v >%RLST%
где:
-m %1
- задание маски переименуемых файлов-v
- включить вывод процесса переименованияВывод производится на
STDOUT
, потому перенаправляем его во временный файл (>%RLST%
).Пример содержимого файла (
X:\Temp\15158.18655
):Rename files...
Z:\Test1.txt --> 1.txt --> tuz3v4t3.ovw OK.
Z:\Test2.txt --> 2.txt --> npk5b7jn.q12 OK.
Z:\Test3.txt --> 3.txt --> sqtn63cl.dwa OK.
Z:\Test4.txt --> 4.txt --> m371e448.q12 OK.
Found files: 4
Renamed files: 4
Error files: 0
6. В цикле вытаскиваем имена переименованных файлов из файла-списка:
FOR /F "tokens=5,5 delims= " %%i in (%RLST%) do (
[внутри цикла]
)
Справка по команде FOR BAT-файла (копия в PDF)
Внутри цикла:
1. Вызываем
shred
для каждого файла из списка:shred -n 3 -z %%i
где:
-n 3
- затереть случайными данными файл в 3 прохода-z
- сделать дополнительный проход, затерев содержимое файла нолями (символом с кодом 0x00h
)2. Удаляем файл:
del %%i
После цикла затираем и удаляем сам файл со списком файлов, имя которого в
%RLST%
:shred -n 3 -z %RLST%
del %RLST%
exit /b
Команда
exit /b
завершает работу BAT-файла, параметр /b
указывает, чтобы по выходу из BAT-файла, командный процессор не был бы закрыт.Ниже в BAT-файле будет идти метка
:paramerr
@echo off
IF "%1" EQU "" goto paramerr
SET RLST=%TEMP%\%RANDOM%.%RANDOM%
rr -m %1 -v >%RLST%
FOR /F "tokens=5,5 delims= " %%i in (%RLST%) do (
shred -n 3 -z %%i
del %%i
)
::remove list of files
shred -n 3 -z %RLST%
del %RLST%
exit /b
:paramerr
echo First parameter must be file name or file mask!
echo e.g. rrshred.bat *.txt
echo e.g. rrshred.bat text.txt
На GitHub
1. Скачать rr + shred + rrshred.bat с GitHub (ZIP-архив)
2. Распаковать архив в один каталог, находящийся в переменной окружения
%PATH%
, например, C:\Windows
.3. Пример вызова:
rrshred.bat *.txt
- затрет и удалит файлы *.txt
в текущем каталоге.Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2023/11/22/bat-c