Batch file 批处理文件:将一个文件覆盖为多个现有文件

Batch file 批处理文件:将一个文件覆盖为多个现有文件,batch-file,Batch File,我试图为我的公司制定一个简单的安全程序。 我们通常制作很多文档或ppt(x)文件和 出于某种原因,我们需要让它们尽快失效。 所以我们通常会删除所有的文件,但是花了很长时间。 所以我想我可以通过覆盖文件来做到这一点。 如果我有一个空的文档或ppt文件,然后在每个工作驱动器中覆盖所有的文档、ppt文件,那么它将比仅仅删除更快、更安全。 所以我试着用xcopy 假设empty.doc只是空文档文件 xcopy /s /y c:\users\mycom\empty.doc c:\*.doc 但它说不能

我试图为我的公司制定一个简单的安全程序。 我们通常制作很多文档或ppt(x)文件和 出于某种原因,我们需要让它们尽快失效。 所以我们通常会删除所有的文件,但是花了很长时间。 所以我想我可以通过覆盖文件来做到这一点。 如果我有一个空的文档或ppt文件,然后在每个工作驱动器中覆盖所有的文档、ppt文件,那么它将比仅仅删除更快、更安全。 所以我试着用xcopy 假设empty.doc只是空文档文件

xcopy /s /y c:\users\mycom\empty.doc c:\*.doc
但它说不能执行循环复制 我需要你们帮忙 我很高兴听到这个建议


谢谢。

这是一个旧的批处理文件,我用它来做这项工作:

:: dispose.bat
@echo off
:: Check parameter(s), stripping quotes
set yp1=%1
set ydf=
:insistp1 
if defined yp1 set yp1=%yp1:"=%
if not defined yp1 for %%i in (echo goto) do %%i error - filename required
if not exist "%yp1%" for %%i in (echo goto) do %%i error - file not found
for %%i in ("%yp1%") do (set yfr=%%i&call :zapit %%~di)  2>nul

:error
:: Clean up variables used
if defined ydf echo Warning! dispose failed!!
for %%i in (yp1 yfr yrn ydf) do set %%i=
goto :eof

:zapit
set yfr=%yfr:"=%
IF /i %1 == u: DEL "%yfr%" &goto :eof
if not exist %1\delete\. md %1\delete
(set yrn=)
:rndloop
set yrn=%yrn%%random%
if exist %1\delete\%yrn% goto rndloop
if not exist "%yfr%" set ydf=Y&goto :eof
move "%yfr%" %1\delete\%yrn%>nul
goto :eof


:: dispose.bat ends
注意,
u:
在我的系统中是一个RAMDRIVE,因此只需删除即可

目的不是实际删除文件,而是将其移动到名为
?:\delete
的目录中,并在该目录中为其提供随机名称

由于文件是简单的
MOVE
d,因此速度相当快,可以满足您的时间考虑

对我来说,一个问题是
复制
一个文件覆盖所有目标文件的想法。如果复制的文件比其他文件短,则仍有一些数据可供恢复。无论如何,这将比简单地删除文件(你说你正在做)要慢

此方案只是将要删除的文件累积到同一驱动器上的已知目录中(因此它们将只是
move
d,而不是
copied


一旦它们进入
\delete
目录,您就可以让
ccleaner
recuva
之类的实用程序在后台的单个目录上释放,它将覆盖指定次数的文件。

这里有一个更简单的方法。小心点

在命令行中:

for /r c:\ %A in (*.doc? *.ppt?) do echo. > %A
for /r c:\ %A in (*.doc? *.ppt?) do copy d:\path\file.ext > %A
在批处理文件中:

for /r c:\ %%A in (*.doc? *.ppt?) do echo. > %%A
for /r c:\ %%A in (*.doc? *.ppt?) do copy d:\path\file.ext > %%A
编辑:

要替换为文件,请参见下面的示例。用您想要的文件替换示例的
d:\path\file.ext
。请注意,前面的选项将更快地工作,并获得类似的结果

在命令行中:

for /r c:\ %A in (*.doc? *.ppt?) do echo. > %A
for /r c:\ %A in (*.doc? *.ppt?) do copy d:\path\file.ext > %A
在批处理文件中:

for /r c:\ %%A in (*.doc? *.ppt?) do echo. > %%A
for /r c:\ %%A in (*.doc? *.ppt?) do copy d:\path\file.ext > %%A
无论采用哪种方式,正如Magoo的回答中所指出的,较大的文件在驱动器上仍然会有可恢复的数据。你在评论中说:

但是如果我覆盖了原始文件,那么他们就猜不到它是什么 除非他们有bak文件


这是不准确的。法医工具可以检索未被新内容覆盖的部分数据。

将empty.doc放在其他驱动器上。CDROM、USB或HDD等。为什么覆盖要比删除更快、更安全?@aschipfl在我看来,将小于1kb的文件覆盖到原始文件可能比删除超过1kb的文件更快,而且如果我删除这些文件,ppl可以通过某些程序或数据恢复公司恢复这些文件。但是如果我覆盖了原始文件,那么他们就无法猜测它是什么,除非他们得到了bak文件。为什么覆盖要比删除快?无论如何,删除将删除文件夹分配表中的条目,但将数据保留在硬盘的扇区中(它们只是标记为空闲);用小文件覆盖只会覆盖第一个扇区,但会留下其余扇区,因此它们也可以恢复;要安全地删除文件,您需要刷卡(删除文件分配表中的条目,并用伪数据或随机数据覆盖所有扇区,甚至多次)…好的,谢谢您的帮助,顺便问一下,有没有办法将一个文件覆盖为多个文件?
对于/r“d:\starting directory”%%x in(*.doc?*.ppt?)是否复制/y“您要复制这些文件的文件名“%%a>nul
小心使用-将以静默方式覆盖与提供的掩码匹配的所有文件的第一部分,剩余部分可恢复。好的,谢谢您的帮助顺便问一下,我是否可以将一个文件覆盖为多个文件?你的代码是完美的,但出于某种原因,我想知道如何覆盖覆盖是自动的。如果你想用一个文件代替,请看我修改后的答案。