我需要删除该路径中新创建的文件。
在我们的情况下,我们将在某个路径中包含多个文件。运行我们的应用程序后,它将创建新文件。我需要单独删除这些新文件。
最初,我们考虑将所有现有文件制作为只读。因此,删除文件*.*
将仅删除新文件。但是排除了该选项,因为在我们的项目中我们无法将文件设置为只读。
所以我试图找到另一种删除这些新文件的方法。
答案 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
批处理文件即可。