删除指定日期之后的所有文件,代码运行缓慢。

18 浏览
0 Comments

删除指定日期之后的所有文件,代码运行缓慢。

上周我提出了一个关于如何获取一个批处理文件或代码来删除一个文件夹中60天前创建的所有.txt文件的问题,我被引导使用了下面的代码。

forfiles -p "J:\Test_Files" -s -m *.txt* -d 60 -c "cmd /c del @path"

这段代码完成了工作,运行正常,但删除速度太慢,每分钟只能删除250个文件。我需要删除总共260万个文件,这将花费太长时间。

下面的代码每秒删除200个文件,但是删除了所有的.txt文件。

cd /BASE_PATH
del /s *.txt

我应该如何编辑这段代码来删除60天前创建的文件?我需要它以更快的速度删除。

谢谢你的帮助! 😀

0
0 Comments

原因:代码运行缓慢。

解决方法:使用批处理脚本中的del命令删除指定日期之后的所有文件,使用robocopy命令获取匹配文件列表,并将列表保存到临时文件中,然后使用for循环遍历临时文件中的文件列表,并使用del命令删除对应的文件。最后,删除临时文件。

代码示例:

off
setlocal enableextensions disabledelayedexpansion
rem Configure script
set "target=J:\Test_Files"
set "fileMask=*.txt"
set "age=60"
rem We will use a temporary file. 
for %%t in ("%temp%\%~nx0.%random%%random%%random%.tmp") do (
    rem Send to temp file the list of matching files retrieved by the robocopy command
    >"%%~ft" robocopy "%target%." "%target%." "%fileMask%" /minage:%age% /l /nocopy /is /s /njh /njs /ndl /nc /ns
    rem Process temporary file deleting the selected files
    for /f "usebackq tokens=*" %%f in ("%%~ft") do echo del "%%~ff"
    rem Once done, remove the temporary file
) & del /q "%%~ft"

注意:上述代码中的del命令只会在控制台上显示,如果输出正确,可以删除echo命令。

通过使用robocopy命令,代码能够以更快的速度批量删除文件。与使用for命令检查文件大小(%~zI)相比,使用robocopy命令的速度快得多。

以上代码中临时文件名被存储在FOR循环的变量中,这是作者的个人习惯。这样做更容易阅读,通过FOR替代参数引用临时文件更容易编写,而且可以使用更少的字符。同时,使用robocopy命令和xcopy命令可以更好地满足需求。

通过使用robocopy命令和del命令,可以在指定日期之后批量删除文件,并且相较于其他方法,代码执行速度更快。

0