使用yyyymm作为文件夹名称删除旧文件夹的批处理脚本

时间:2016-06-29 11:06:27

标签: batch-file

我的文件夹名称如此201601,201501,201602,201603,基本上是yyyymm作为文件夹名称。

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

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

1 个答案:

答案 0 :(得分: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