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开始的本地环境变量块,任何在这个块内做的环境变量更改都不会影响到脚本外部的环境。

推荐阅读:
![]() 路过(0) |
![]() 雷人(0) |
![]() 握手(1) |
![]() 鲜花(0) |
![]() 鸡蛋(0) |