【问题标题】:Batch Script to delete older folders with yyyymm as folder name用于删除以 yyyymm 作为文件夹名称的旧文件夹的批处理脚本
【发布时间】:2016-06-30 05:09:51
【问题描述】:

我有这样命名的文件夹 201601,201501,201602,201603 ,基本上 yyyymm 作为文件夹名称。

考虑到今天月份的文件夹将是 201606。我需要删除比 201606 早 6 个月的所有文件夹。

另外,我不想在修改日期之前删除文件夹,而是通过检查文件夹名称中的月份和年份并将其与当前月份的文件夹年份和月份进行比较,如果文件夹超过 6 个月,则删除.

【问题讨论】:

  • "我需要删除所有比 201606 早 6 个月的文件夹" 很长时间了 :)

标签: batch-file


【解决方案1】:

这是一种批量处理的方法:

echo off

SET rootdir=C:\Temp
SET yyyy=%date:~10,4%
SET cmm=%date:~4,2%

::calculate name of folder 6 months ago based on current month:
if %cmm%==01 (SET /a yyyy=%yyyy%-1 && SET mm=07)
if %cmm%==02 (SET /a yyyy=%yyyy%-1 && SET mm=08)
if %cmm%==03 (SET /a yyyy=%yyyy%-1 && SET mm=09)
if %cmm%==04 (SET /a yyyy=%yyyy%-1 && SET mm=10)
if %cmm%==05 (SET /a yyyy=%yyyy%-1 && SET mm=11)
if %cmm%==06 (SET /a yyyy=%yyyy%-1 && SET mm=12)
if %cmm%==07 (SET mm=01)
if %cmm%==08 (SET mm=02)
if %cmm%==09 (SET mm=03)
if %cmm%==10 (SET mm=04)
if %cmm%==11 (SET mm=05)
if %cmm%==12 (SET mm=06)

::move to target directory:
pushd %rootdir%

::remove old folders:
for /D %%a in (*) do (
    if %%a LSS %yyyy%%mm% (rmdir /s /q %%a)
)
::return to current directory (optional):
popd

但在 PowerShell 中要容易得多:

$rootdir = "C:\Temp\"
$yyyymm = get-date -Date (get-date).AddMonths(-6) -Format "yyyyMM"
Get-ChildItem $rootdir -Directory | Where-Object {$_.Name -lt $yyyymm} | Remove-Item

【讨论】: