Windows 如何通过批处理脚本删除最旧的日期文件夹?

Windows 如何通过批处理脚本删除最旧的日期文件夹?,windows,batch-file,Windows,Batch File,我有一个包含多个文件夹的目录,这些文件夹的文件名为日期: ... 03-Wed-11 03-Tue-10 03-Mon-09 ... 如何编写删除最旧文件夹的批处理脚本。最好是一个月前的文件夹?通过使用文件名,选择最早的文件名 无法保存包含:和/的文件夹。这就是为什么下面的脚本。我用来创建日期文件夹()的文件: 如果按如下方式回显当前日期:echo%CurrentDate%,它将按如下方式显示:03-Web-11日期是Windows系统日期。尝试以下操作: @echo off SETLOCAL

我有一个包含多个文件夹的目录,这些文件夹的文件名为日期:

...
03-Wed-11
03-Tue-10
03-Mon-09
...
如何编写删除最旧文件夹的批处理脚本。最好是一个月前的文件夹?通过使用文件名,选择最早的文件名

无法保存包含
/
的文件夹。这就是为什么下面的脚本。我用来创建日期文件夹()的文件:

如果按如下方式回显当前日期:
echo%CurrentDate%
,它将按如下方式显示:
03-Web-11
日期是Windows系统日期。

尝试以下操作:

@echo off
SETLOCAL EnableDelayedExpansion

REM Need not to set the variable currentYear and currentMonth. It will be automatically set by wmic
set currentYear=
set currentMonth=


REM Setting the currentYear and currentMonth...
for /f "skip=1 tokens=1-2 delims= " %%a in ('wmic path Win32_LocalTime Get Month^,Year /Format:table') do (
    IF NOT "%%~b"=="" (
        set /a currentMonth=%%a
        set /a currentYear=%%b
        set currentYear=!currentYear:~-2,4!
        set currentMonth=!currentMonth:~-2,4!
    )
)

REM removing folder that are more than one year
for /D %%a IN (*) do (
    set folderName=%%a
    set folderYear=!folderName:~-2,9!

    if !currentYear! gtr !folderYear! (
        rmdir /S /Q !folderName!
        echo Deleted !folderName!
    )
)

REM removing folder that are more than one month    
for /D %%a IN (*) do (
    set folderName=%%a
    set folderMonth=!folderName:~0,-7!

    if !currentMonth! gtr !folderMonth! (
        rmdir /S /Q !folderName!
        echo Deleted !folderName!
    )
)
此代码将帮助您删除上个月的文件夹。例如,如果您在2015年3月在此文件夹上运行此代码:

...
01-Fri-15 //deleted, since it is more than one month
02-Thu-15 //deleted, since it is more than one month
03-Wed-15 //retained, since the batch program runs on March 2015
03-Wed-11 //deleted, since it is earlier than 2015
03-Tue-10 //deleted, since it is earlier than 2015
03-Mon-09 //deleted, since it is earlier than 2015
...
请注意,我使用
wmic
获取当前日期,而不是
date\t
。这是因为
wmic
允许您在不受区域设置影响的情况下获取当前日期


希望有帮助

这些数字代表什么?@Marichyasana这些是日期-月-日名称-日编号。我会发布生成这些数字的代码。我在
set currentYear=
下填写了2015,在
set currentMonth=
下填写了march,但是,它删除了所有文件夹,新的还是旧的?也尝试了在
set currentMonth=
下键入03,但它仍然删除了其中的所有文件夹?让它开始工作了,通过使用03和实际使用早于一个月的文件夹;)我可以稍微调整一下代码吗?有没有什么方法可以自动设置
set currentYear=
set currentMonth=
它需要是自动的!这个代码是自动的。它将使用
wmic
命令自动设置
currentYear
currentMonth
。它将删除任何早于本月的文件夹:)
...
01-Fri-15 //deleted, since it is more than one month
02-Thu-15 //deleted, since it is more than one month
03-Wed-15 //retained, since the batch program runs on March 2015
03-Wed-11 //deleted, since it is earlier than 2015
03-Tue-10 //deleted, since it is earlier than 2015
03-Mon-09 //deleted, since it is earlier than 2015
...