«

BAT批处理脚本自动删除文件夹及子目录内的某天之前的文件(含变量控制)

时间:2024-3-26 09:54     作者:Anglei     分类: Windows


这个BAT脚本的目的是删除指定目录(TARGET_DIR)及其子目录下所有最后写入时间超过DAYS天的文件,代码如下:

@echo off  
setlocal  

set "TARGET_DIR=E:\test\test"  
set "DAYS=3"  

powershell -Command "$limit = (Get-Date).AddDays(-%DAYS%).ToFileTime(); Get-ChildItem -Path '%TARGET_DIR%' -Recurse -File | Where-Object { $_.LastWriteTime.ToFileTime() -lt $limit } | Remove-Item -Force"  

endlocal

下面对脚本语句进行详细解读:

@echo off
这一行用于关闭命令提示符的命令回显,使得脚本执行时不会显示每条命令本身,只显示命令的输出结果。


setlocal
这一行开始一个本地环境变量块。这意味着在setlocal和endlocal之间的所有环境变量更改都只影响这个块内的命令,不会影响到脚本外部的环境。


set "TARGET_DIR=C:\path\to\your\directory"
这一行设置了一个名为TARGET_DIR的环境变量,其值为C:\path\to\your\directory。这个变量用于指定要遍历和删除旧文件的目录。


set "DAYS=30"
这一行设置了一个名为DAYS的环境变量,其值为30。这个变量用于指定文件最后写入时间超过多少天应该被删除。


powershell -Command "$limit = (Get-Date).AddDays(-%DAYS%).ToFileTime(); Get-ChildItem -Path '%TARGETDIR%' -Recurse -File | Where-Object { $.LastWriteTime.ToFileTime() -lt $limit } | Remove-Item -Force"
这一行是脚本的核心,它调用PowerShell执行一系列命令。


"$limit = (Get-Date).AddDays(-%DAYS%).ToFileTime();":
Get-Date 获取当前日期和时间。


.AddDays(-%DAYS%) 从当前日期和时间中减去DAYS变量指定的天数。
.ToFileTime() 将得到的日期时间对象转换为文件时间格式,这通常是一个64位整数。
这个整数被赋值给$limit变量,作为判断文件是否应该被删除的时间阈值。


"Get-ChildItem -Path '%TARGET_DIR%' -Recurse -File":
Get-ChildItem 是PowerShell中用于获取目录内容的命令。
-Path '%TARGET_DIR%' 指定了要遍历的目录。
-Recurse 指示命令递归遍历指定目录及其所有子目录。
-File 指示只返回文件,不包括目录。


"| Where-Object { $_.LastWriteTime.ToFileTime() -lt $limit }":
| 是PowerShell中的管道操作符,用于将前一个命令的输出作为下一个命令的输入。
Where-Object 用于过滤对象,这里它过滤出最后写入时间(转换为文件时间格式)小于$limit的文件。


"| Remove-Item -Force":
Remove-Item 是PowerShell中用于删除对象的命令。
-Force 参数指示命令强制删除文件,即使文件是只读的或者具有其他阻止删除的属性。


endlocal
这一行结束了setlocal开始的本地环境变量块,任何在这个块内做的环境变量更改都不会影响到脚本外部的环境。

本文完结,相关标签: 批处理 脚本 BAT 删除

 版权所有:Anglei
 文章标题:BAT批处理脚本自动删除文件夹及子目录内的某天之前的文件(含变量控制)
 除非注明,本站文章如未特殊说明均为 MAXADA社区知识库 原创,且版权所有,请勿用于任何商业用途。

推荐阅读:

看完后感想如何?

路过(0)

雷人(0)

握手(1)

鲜花(0)

鸡蛋(0)
分享到: