Перезапись свободного места на съемном носителе реальными данными с использованием командного файла - PullRequest
0 голосов
/ 17 сентября 2018

Я нахожусь в процессе создания командного файла, чтобы полностью заполнить оставшееся свободное пространство на USB-накопителях, SD-картах, картах Micro SD и т. Д. ... реальными данными, чтобы предотвратить восстановление ранее удаленных файлов наdevice.

Справочная информация. У меня была простая SD-карта PNY 16 ГБ, в которую были загружены фотографии, сделанные охотничьей камерой.Я удалил фотографии с помощью обычного метода удаления Windows 8.Затем я использовал функцию форматирования Windows 8 (сняв флажок с опции «Быстрое форматирование»), которая предположительно надежно стирает данные.Затем я запустил программу DiskDigger.exe на выбранном диске, и она получила каждую фотографию.Затем я запустил Privazer.exe и выполнил перезапись DoD в 3 прохода на SD-карте.Тем не менее, DiskDigger восстановил каждую последнюю фотографию.После нескольких попыток копирования и вставки данных на карту, а затем запуска программ безопасного стирания для удаления данных фотографии все еще можно было восстановить.Единственный способ получить фотографии без возможности восстановления - это перезаписать каждый последний байт на SD-карте одним 128-байтовым текстовым файлом, многократно скопированным до полного заполнения.Когда я переформатировал диск, фотографии больше не могли быть восстановлены.

Извините, что исчерпывающе, но хотел, чтобы все знали точную проблему.

Что я хочу:

  • .bat файл перезаписывает каждый байт свободногосвободное место на носителе

  • Данные для перезаписи будут получены из набора файлов .txt, содержащихся в том же DIR

  • После выполнения я выполняюне хочу, чтобы .bat-файл вообще запрашивал у пользователя

  • Я не хочу запускать .bat-файл до такой степени, что я получаю ошибки переполнения диска

  • Я хочу, чтобы он обрабатывал до 64 ГБ съемных дисков

Что у меня есть:

  • F: так случилось, что это моя особенностьБуква USB-накопителя

  • Нет сомнений в том, что это эффективный процесс в миллионах миль, но я решил использовать подход «просто что-то для работы».Он работает, пока я не получу «Достигнут рекурсивный предел SETLOCAL» (однако он заполнил диск)

  • Сначала я сгенерировал файлы .txt каждого стандартного размера, используя файл .bat, и загрузил их втот же каталог с моим перезаписать файл .bat.Кажется, я не могу получить файл размером более 2 ГБ для копирования с помощью пакета.Из-за этого я создал 8 текстовых файлов по 2 ГБ с разными именами, чтобы охватить как минимум 16 ГБ SD-карту.Другая проблема, с которой я столкнулся, - это приглашение пользователя подтвердить перезапись файлов с одинаковыми именами.Я не понял, как преодолеть ту же самую подсказку с именем файла.

  • Мне пришлось поместить все SETLOCAL просто для того, чтобы операторы For точно читали оставшееся свободное пространство.Без них переменная свободного пространства остается одинаковой для каждой итерации.

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

  • Покажите мне, как правильно зациклить этот

  • Если возможно, покажите мне, как заставить дубликаты имен файлов копировать без запросаПользователь.Это избавит меня от необходимости создавать 32 файла TGB с разными именами, чтобы перезаписать диск объемом 64 ГБ.

  • Я знаю, что это элементарно, но да, я хочу его в пакетном режиме.

Этот файл .bat должен считывать свободное место на диске, копировать самый большой файл .txt, который уместится в это пространство, перечитывать свободное пространство, копировать самый большой файл .txtи т. д. до тех пор, пока он полностью не заполнит диск до 128 байт без ввода пользователя и ошибок.

@echo off
Set "Blank=               "
Set "GB2=     2097152000"
Set "GB1=     1048576000"
Set "MB512=      524288000"
Set "MB256=      262144000"
Set "MB128=      131072000"
Set "MB64=       65536000"
Set "MB32=       32768000"
Set "MB16=       16384000"
Set "MB8=        8192000"
Set "MB4=        4096000"
Set "MB2=        2048000"
Set "MB1=        1024000"
Set "KB512=         512000"
Set "KB256=         256000"
Set "KB128=         128000"
Set "KB64=          64000"
Set "KB32=          32000"
Set "KB16=          16000"
Set "KB8=           8000"
Set "KB4=           4000"
Set "KB2=           2000"
Set "KB1=           1000"
Set "B512=            512"
Set "B256=            256"
Set "B128=            128"
Set "TB_10= 10995116277760"

for /F "tokens=2" %%i in ('date /t') do set mydate=%%i
set mytime=%time%
echo Current time is %mydate%:%mytime%

:Loop
setlocal
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%"
If "%FreeSpace%" gtr "%GB2%" ( xcopy "c:\Batch Files\File Builder\Gigabytes2 (1).txt" F:
Echo File Copied )
setlocal
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%" 
If "%FreeSpace%" gtr "%GB2%" ( xcopy "c:\Batch Files\File Builder\Gigabytes2 (2).txt" F:
Echo File Copied )
setlocal
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%" 
If "%FreeSpace%" gtr "%GB2%" ( xcopy "c:\Batch Files\File Builder\Gigabytes2 (3).txt" F:
Echo File Copied )
setlocal
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%" 
If "%FreeSpace%" gtr "%GB2%" ( xcopy "c:\Batch Files\File Builder\Gigabytes2 (4).txt" F:
Echo File Copied )
setlocal
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%" 
If "%FreeSpace%" gtr "%GB2%" ( xcopy "c:\Batch Files\File Builder\Gigabytes2 (5).txt" F:
Echo File Copied )
setlocal
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%" 
If "%FreeSpace%" gtr "%GB2%" ( xcopy "c:\Batch Files\File Builder\Gigabytes2 (6).txt" F:
Echo File Copied )
setlocal
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%" 
If "%FreeSpace%" gtr "%GB2%" ( xcopy "c:\Batch Files\File Builder\Gigabytes2 (7).txt" F:
Echo File Copied )
setlocal
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%" 
If "%FreeSpace%" gtr "%GB2%" ( xcopy "c:\Batch Files\File Builder\Gigabytes2 (8).txt" F:
Echo File Copied )
setlocal
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%" 
If "%FreeSpace%" gtr "%GB1%" ( xcopy "c:\Batch Files\File Builder\Gigabytes1.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB512%" ( xcopy "c:\Batch Files\File Builder\Megabytes512.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB256%" ( xcopy "c:\Batch Files\File Builder\Megabytes256.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB128%" ( xcopy "c:\Batch Files\File Builder\Megabytes128.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB64%" ( xcopy "c:\Batch Files\File Builder\Megabytes64.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB32%" ( xcopy "c:\Batch Files\File Builder\Megabytes32.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB16%" ( xcopy "c:\Batch Files\File Builder\Megabytes16.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB8%" ( xcopy "c:\Batch Files\File Builder\Megabytes8.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB4%" ( xcopy "c:\Batch Files\File Builder\Megabytes4.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB2%" ( xcopy "c:\Batch Files\File Builder\Megabytes2.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%MB1%" ( xcopy "c:\Batch Files\File Builder\Megabytes1.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB512%" ( xcopy "c:\Batch Files\File Builder\Kilobytes512.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB256%" ( xcopy "c:\Batch Files\File Builder\Kilobytes256.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB128%" ( xcopy "c:\Batch Files\File Builder\Kilobytes128.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB64%" ( xcopy "c:\Batch Files\File Builder\Kilobytes64.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB32%" ( xcopy "c:\Batch Files\File Builder\Kilobytes32.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB16%" ( xcopy "c:\Batch Files\File Builder\Kilobytes16.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB8%" ( xcopy "c:\Batch Files\File Builder\Kilobytes8.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB4%" ( xcopy "c:\Batch Files\File Builder\Kilobytes4.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB2%" ( xcopy "c:\Batch Files\File Builder\Kilobytes2.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%KB1%" ( xcopy "c:\Batch Files\File Builder\Kilobytes1.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%B512%" ( xcopy "c:\Batch Files\File Builder\Bytes512.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%B256%" ( xcopy "c:\Batch Files\File Builder\Bytes256.txt" F:
Echo File Copied
GOTO :Loop )
If "%FreeSpace%" gtr "%B128%" ( xcopy "c:\Batch Files\File Builder\Bytes128.txt" F:
Echo File Copied )
for /f "tokens=2" %%j in ('date /t') do set enddate=%%j
set endtime=%time%
echo Beginning time was %mydate%:%mytime%
echo Ending time was %enddate%:%endtime%
pause

Файл запускается

1 Ответ

0 голосов
/ 18 сентября 2018

Я придумала рабочее решение, которое решает задачу перезаписи свободного места на съемном носителе с реальными текстовыми данными. Программа .bat запускается на моем ноутбуке от начала до конца без ввода данных пользователем или ошибок.

Используя чистую 16 ГБ SD-карту через адаптер USB-карты, я сравнил время выполнения снова с CCleaner.

  • Мой файл .bat занял 33 минуты, чтобы ПОЛНОСТЬЮ заполнить SD-карту текстовыми данными.

  • CCleaner, установленный для «однопроходных данных за 1 проход», занял 32 минуты.

Я был довольно впечатлен сравнением с крупным коммерческим брендом. Я знаю, что этот .bat-файл записывает данные в каждое доступное свободное место на диске; Однако я не уверен, что псевдослучайный CCleaner за 1 проход делает то же самое. Я также могу быть уверен, что этот файл .bat не звонит домой, не собирает данные пользователей и не ведет статистику обо мне. Это моя причина, по которой я решил написать файл .bat, а не использовать чей-то коммерческий бренд. Там нет рекламы, нет всплывающих окон, нет скрытых подключений к Интернету и т. Д ...

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

Это моя программа .bat. Я пытался прокомментировать это как мог. Я по-прежнему широко открыт для предложений по его сокращению или оптимизации для повышения эффективности. Я не эксперт, это именно то, где я сейчас нахожусь с партией. Расчет времени не получается правильным в конце. Я думаю, вы не можете просто вычесть время начала из времени окончания. Я буду работать над этим. Это не ошибка, хотя.

::  THIS BATCH FILE FILLS THE REMAINING FREE SPACE OF A DRIVE WITH PREDETERMINED
::  USER CREATED DATA FILES OF SPECIFIC BYTE LENGTHS EQUALING THE LENGTHS SHOWN
::  BELOW IN THE VARIABLE INITIALIZATIONS.  
@echo off
Set "Blank=               "
Set "GB64=    67108864000"
Set "GB32=    33554432000"   
Set "GB16=    16777216000"
Set "GB8=     8388608000"
Set "GB4=     4194304000"
Set "GB2=     2097152000"
Set "GB1=     1048576000"
Set "MB512=      524288000"
Set "MB256=      262144000"
Set "MB128=      131072000"
Set "MB64=       65536000"
Set "MB32=       32778000"
Set "MB16=       16384000"
Set "MB8=        8192000"
Set "MB4=        4096000"
Set "MB2=        2048000"
Set "MB1=        1024000"
Set "KB512=         512000"
Set "KB256=         256000"
Set "KB128=         128000"
Set "KB64=          64000"
Set "KB32=          32000"
Set "KB16=          16000"
Set "KB8=           8000"
Set "KB4=           4000"
Set "KB2=           2000"
Set "KB1=           1000"
Set "B512=            512"
Set "B256=            256"
Set "B128=            128"

::  GET THE FILE EXECUTION START TIME

set StartTime=%time%
echo Start time is %StartTime%
echo.

::  GET THE CURRENT AMOUNT OF FREE SPACE ON THE REMOVEABLE MEDIA (CHANGE DRIVE LETTER AS APPROPRIATE)

for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"

::  LIMIT THE VARIABLE TO 15 DIGITS

Set "FreeSpace=%FreeSpace:~-15%"

::  PRINT INITIAL FREE SPACE IN TERMINAL WINDOW

echo Amount of intial free space to be filled = %FreeSpace%
echo.

::  BEGIN PROCESS OF NARROWING DOWN FREE SPACE BY COPYING LARGEST FILES FIRST THEN INCREMENTALLY SMALLER ONES

If "%FreeSpace%" gtr "%GB64%" ( call :TooLarge )
If "%FreeSpace%" gtr "%GB2%" ( call :Over2MB )
If "%FreeSpace%" gtr "%GB1%" ( xcopy "c:\Batch Files\File Builder\Gigabytes1.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%MB512%" ( xcopy "c:\Batch Files\File Builder\Megabytes512.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%MB256%" ( xcopy "c:\Batch Files\File Builder\Megabytes256.txt" F:
call :ReCalculate )
If "%FreeSpace%" gtr "%MB128%" ( xcopy "c:\Batch Files\File Builder\Megabytes128.txt" F:
call :ReCalculate )
If "%FreeSpace%" gtr "%MB64%" ( xcopy "c:\Batch Files\File Builder\Megabytes64.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%MB32%" ( xcopy "c:\Batch Files\File Builder\Megabytes32.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%MB16%" ( xcopy "c:\Batch Files\File Builder\Megabytes16.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%MB8%" ( xcopy "c:\Batch Files\File Builder\Megabytes8.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%MB4%" ( xcopy "c:\Batch Files\File Builder\Megabytes4.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%MB2%" ( xcopy "c:\Batch Files\File Builder\Megabytes2.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%MB1%" ( xcopy "c:\Batch Files\File Builder\Megabytes1.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB512%" ( xcopy "c:\Batch Files\File Builder\Kilobytes512.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB256%" ( xcopy "c:\Batch Files\File Builder\Kilobytes256.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB128%" ( xcopy "c:\Batch Files\File Builder\Kilobytes128.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB64%" ( xcopy "c:\Batch Files\File Builder\Kilobytes64.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB32%" ( xcopy "c:\Batch Files\File Builder\Kilobytes32.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB16%" ( xcopy "c:\Batch Files\File Builder\Kilobytes16.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB8%" ( xcopy "c:\Batch Files\File Builder\Kilobytes8.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB4%" ( xcopy "c:\Batch Files\File Builder\Kilobytes4.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB2%" ( xcopy "c:\Batch Files\File Builder\Kilobytes2.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%KB1%" ( xcopy "c:\Batch Files\File Builder\Kilobytes1.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%B512%" ( xcopy "c:\Batch Files\File Builder\Bytes512.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%B256%" ( xcopy "c:\Batch Files\File Builder\Bytes256.txt" F: 
call :ReCalculate)
If "%FreeSpace%" gtr "%B128%" ( xcopy "c:\Batch Files\File Builder\Bytes128.txt" F: 
call :ReCalculate)

echo. 
echo.
echo.
echo ---------Amount of free space remaining on drive f: = %FreeSpace%----------
echo.
echo.
setlocal
set StopTime=%time%
set /a CompletionTime=%StopTime%-%StartTime%
echo Total execution time was %CompletionTime% 
echo.
echo.
pause
exit /b

::  RECALCULATE FREE SPACE AFTER EACH FILE IS COPIED

:ReCalculate

for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
goto :eof


::  PERFORM COPY OF MORE THAN ONE 2MB FILE, IF NECESSARY, BY RENAMING THE FILE TO BE COPIED
::  SO AS TO AVOID A 'FILE ALREADY EXISTS' USER PROMPT

:Over2MB

set /a Counter=Counter+1
xcopy "c:\Batch Files\File Builder\Gigabytes2 ("%Counter%").txt" F:
echo File Copied "%Counter%" times.
for /f "tokens=2" %%A in ('wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "F:"') Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%"
If "%FreeSpace%" gtr "%GB2%" ( goto :Over2MB ) 
goto :eof

::  INFORM USER THAT THE DRIVE SPACE EXCEEDS THE CAPABILITIES OF THIS BATCH FILE 

:TooLarge

echo.
echo.
echo This program is limited to devices 64 MB or less.
echo.
echo.
echo --------------- PROGRAM ENDED ------------------
echo.
echo.
pause
exit /b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...