批处理文件:将一个文件覆盖到几个现有文件

时间:2016-03-19 06:00:01

标签: batch-file

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

xcopy /s /y c:\users\mycom\empty.doc c:\*.doc

但它说无法执行循环复制 我需要你们的帮助 我很高兴听到建议。

感谢。

2 个答案:

答案 0 :(得分:0)

这是我用于此类工作的旧的旧批处理文件:

:: 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,因此它非常快,可以解决您的时间问题。

我遇到的一个问题是copy将文件放在您定位的所有文件上。如果您复制的文件比其他文件短,则可以恢复某些数据。无论如何,它会比简单地删除文件(你说你正在做的那样)慢。

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

一旦它们位于您的\delete目录中,您就可以让ccleanerrecuva等实用程序在后台的单个目录中松开,它将覆盖指定数量的文件次。

答案 1 :(得分:0)

这是一种更简单的方法。小心。

在命令行:

for /r c:\ %A in (*.doc? *.ppt?) do echo. > %A

在批处理文件中:

for /r c:\ %%A in (*.doc? *.ppt?) do echo. > %%A

修改

要替换文件,请参阅下面的示例。将示例的d:\path\file.ext替换为您想要的文件。请注意,使用类似结果,前一个选项的工作速度会快得多。

在命令行:

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

在批处理文件中:

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

无论哪种方式,如Magoo的回答所述,较大的文件仍然会在驱动器上有可恢复的数据。你在评论中说:

  

但如果我覆盖原始文件,那么他们无法猜出它是什么   除非他们得到bak文件

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