【问题标题】:How do I script a 'recurrsion copy' command?如何编写“递归复制”命令?
【发布时间】:2013-07-09 15:13:44
【问题描述】:

我有一个项目,我需要证明消磁器可以完全擦除标准 HDD 上的所有文件痕迹。我想传播带有重复信息的主题硬盘,例如单个单词“信息”。

我在想,通过这种方式,我可以非常快速地对消磁驱动器进行搜索,以证明该过程的卓越性。作为我的安全要求的一部分,dban 之类的程序不如一个会破坏媒体存储和任何检索功能的进程那么受欢迎。消磁器的使用环境,如果它证明它的完整性,也会限制存储介质的物理破坏。

我希望创建的 .bat 文件应包含一个递归,该递归将影响被复制文件的大小,从而逐步增加数据传输量,从而减少填充驱动器的时间。


我已经使用了以下方法,到目前为止,该过程在非常(相对)短的时间后变慢了。我已经尝试在 ERRORLEVEL 之前和之后使用 '%' ,并且似乎带有 % 符号的程序在进程早期就失败了。有人有想法么?这是我一直在使用的脚本以及我正在尝试此过程的计算机的规格:

P4,1GB 内存,2.8GHz

echo off 
Rem Setting home folder 
C:
Rem Setting Home folder again 
cd\


:copy repeat

rem Using date and time so it formats the file IT_20130708_Time in hours minutes and milliseconds

set hr=%time:~0,2%
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%
COPY "IT.txt" "C:\testcopy\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"
COPY "IT.txt" "C:\testcopy2\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"
COPY "IT.txt" "C:\testcopy3\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"
COPY "IT.txt" "C:\testcopy4\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"
COPY "IT.txt" "C:\testcopy5\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"
COPY "IT.txt" "C:\testcopy6\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"
COPY "IT.txt" "C:\testcopy7\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"
COPY "IT.txt" "C:\testcopy8\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"
COPY "IT.txt" "C:\testcopy9\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"
COPY "IT.txt" "C:\testcopy10\IT_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%RANDOM%.txt"


rem if it Does not error GOTO the start aka :copy repeat

IF ERRORLEVEL ==0 GOTO copy repeat

rem end this file if error 

goto end

:end

上面的意图是即使复制操作失败,也要继续复制下一组文件。此外,该过程需要在尽可能短的时间内完成。我真诚地感谢所有建议,感谢您的时间和考虑。

【问题讨论】:

  • errorlevel 从每个 copy 命令和下一个覆盖设置。你不能测试copys的块。
  • 感谢您的编辑,原版很长,现在看起来好多了!

标签: recursion batch-file copy propagation


【解决方案1】:

您会发现一个问题(FAT32,myabe NTFS 也是)是文件夹中有大量文件,创建新文件需要更长的时间。您应该考虑每隔 50,000 个文件创建一个新文件夹。

要复制的文件的大小是一个因素,因为小文件效率非常低 - 因此这会创建一个约 27 MB 的文件进行复制,其中包含重复的 INFORMATION。

在某些驱动器格式中存在有限数量的根目录条目,因此这会创建一个根文件夹,然后在其中创建子目录。

这可能对你有用:

@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set stamp=%dt:~0,8%-%dt:~8,6%

del it.txt 2>nul
echo creating string
for /L %%a in (1,1,500) do call set var=%%var%%INFORMATION
echo creating it.txt file (45 seconds...)
for /L %%a in (1,1,5000) do (set /p =%var%>>IT.TXT <nul)

for /L %%a in (1,1,2000000000) do call :next %%a
pause
goto :EOF

:next
set folder=00000000000%1
set folder=%folder:~-10%
set folder=c:\testcopy\testcopy-%folder%
md  %folder% 2>nul
set c=0
:loop
set /a c=c+1
echo %folder%-%c%
copy it.txt %folder%\IT_%stamp%_%random%%random%%random%%random%.txt >nul
if %c% EQU 50000 goto :EOF
if not errorlevel 1 goto loop
goto :EOF

【讨论】:

  • 最优秀的信息展示,非常感谢!我会将其纳入我们的流程并报告结果。非常令人印象深刻和乐于助人的社区。感谢您的意见
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
相关资源
最近更新 更多