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-файле.

Итоговый 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

BAT-файл целиком

@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 в текущем каталоге.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *