如何在批处理文件中删除新生成的文件

时间:2019-05-22 07:31:50

标签: batch-file

我需要删除该路径中新创建的文件。

在我们的情况下,我们将在某个路径中包含多个文件。运行我们的应用程序后,它将创建新文件。我需要单独删除这些新文件。

最初,我们考虑将所有现有文件制作为只读。因此,删除文件*.*将仅删除新文件。但是排除了该选项,因为在我们的项目中我们无法将文件设置为只读。

所以我试图找到另一种删除这些新文件的方法。

1 个答案:

答案 0 :(得分:1)

这似乎或多或少是您所需要的:

@echo off
set newfile=
set oldfile=
:start
for /f %%i in ('dir *.txt /b /a-d /o-d') do set "newfile=%%i" & goto reveal
:reveal
if not defined oldfile set "oldfile=%newfile%"
if not "%newfile%"=="%oldfile%" (
    echo deleting %newfile%
    del %newfile% /Q
    set oldfile=
)
timeout /t 3 /nobreak>nul 2>&1
goto start

它将永久循环运行,并且每三秒钟将重新检查目录中是否有新的.txt文件。一旦检测到,它将回显deleting file.txt并删除文件。

很明显,如果需要,您可以增加timeout的值。

要对此进行测试,请将其放置在任何目录中并运行脚本。打开资源管理器,浏览到该目录并创建一个新文件test.txt,然后看它如何消失。

编辑根据删除多个文件的要求:

创建一个批处理文件,该文件将列出文件,您需要在下面的演示路径中更新目录的路径。然后运行此脚本一次,将在{{中创建exclusion.txt文件1}}目录。

%temp%

现在将此文件复制到要从中删除内容的每个目录中

@echo off
dir /b "C:\directory">"%temp%\exclusion.txt"
dir /b "C:\directory 2">>"%temp%\exclusion.txt"
dir /b "D:\directory 3">>"%temp%\exclusion.txt"

所以现在将要发生的是,它将删除目录中的所有文件,除非它位于@echo off set cnt=0 & set excl= & set ext= setlocal enabledelayedexpansion for /f "usebackq delims=" %%a in ("%temp%\exclusion.txt") do ( set /a cnt+=1 set "nlr!cnt!=%%a" ) for /l %%i in (1,1,%cnt%) do ( if not defined excl ( set "excl=!nlr%%i!" ) else ( set "excl=!excl! !nlr%%i!" ) ) for /f "delims=" %%i in ('dir /b /a-d ^|findstr /VIE "%excl%"') do ( if /i not "%%i"=="exclusion.txt" if not "%%i"=="%~0" echo del "%%i" )

目前,此解决方案仅会exclusion.txt个del命令,一旦您满意,它将仅删除要删除的内容,则需要从倒数第二行中删除echo。 / p>

最后,如果您需要将新文件添加到不应删除的目录中,只需重新运行echo批处理文件即可。