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

Batch file 如何删除批处理文件中新生成的文件,batch-file,Batch File,我需要删除在该路径中新创建的文件 在本例中,我们将在某个路径中有多个文件。运行应用程序后,它将创建新文件。我需要单独删除这些新文件 最初,我们考虑将所有现有文件设置为只读。因此,删除文件*.*将只删除新文件。但是这个选项被排除了,在我们的项目中,我们不能将文件设置为只读 因此,我正在尝试另一种方法来删除这些新文件。这似乎或多或少符合您的要求: @echo off set newfile= set oldfile= :start for /f %%i in ('dir *.txt /b /a-d

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

在本例中,我们将在某个路径中有多个文件。运行应用程序后,它将创建新文件。我需要单独删除这些新文件

最初,我们考虑将所有现有文件设置为只读。因此,删除文件
*.*
将只删除新文件。但是这个选项被排除了,在我们的项目中,我们不能将文件设置为只读


因此,我正在尝试另一种方法来删除这些新文件。

这似乎或多或少符合您的要求:

@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
文件。一旦检测到,它将回显
删除文件.txt
并删除文件

显然,如果需要,您可以增加
超时

要测试这一点,请将其放在任何目录中并运行脚本。打开资源管理器并浏览到目录,创建一个新文件
test.txt
,查看它是如何消失的

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

创建一个批处理文件,用于列出文件列表,您需要更新下面演示路径中的目录路径。。然后运行此脚本一次,它将在
%temp%
目录中创建
排除.txt
文件

@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

目前,此解决方案只会
echo
del命令,一旦您满意,它将只删除打算删除的内容,您需要从最后一行中删除
echo


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

一次需要删除多少文件?这取决于具体情况。有时应用程序会创建10个新文件,因此在这种情况下,我们需要删除这10个文件。有时它会创建15个文件,所以在这种情况下,我们需要删除这15个文件。感谢您的回复。在我的例子中,我将仅在生成新文件后运行批处理文件。(这意味着,在应用程序运行完成并创建这些新文件后,我将运行批处理文件)。此外,该路径中将有许多文件。此外,我们将在多个位置(多条路径)执行相同的操作。因此,每个路径都有自己的不同文件名。此外,新生成的文件将具有动态名称。那么,我们是否可以使用时间戳或类似方法删除文件?好的,但您需要更具体地说明,您多久启动一次应用程序?目前,我们有一个批处理文件将运行我们的应用程序。例如,Runtest.bat。因此,这将运行我们的应用程序并生成新文件。所以下次在我再次运行这个批处理文件之前,我需要运行我们的新批处理文件,它应该删除所有新生成的文件。。我们将所有当前文件列为排除文件,然后它将只删除新文件。也许这是唯一的方法。我想的是,同样的,我们有大约100个不同的目录。所有这些路径都将具有唯一的文件名。因此,所有这些路径都应该有自己的排除列表。相反,我想,我们是否可以做一些共同点。