Windows Bat Del旧文件

时间:2013-11-25 07:36:30

标签: batch-file

我在一些目录中编写了一个窗口批处理文件,而不是3个月,但是,有一些问题:Loop_Folder_Del_Old_Files。我不知道为什么我不能分配文件的最后修改日期,请帮助找出问题所在。以下是源代码和程序结果,谢谢!

源代码

:program_start
@ECHO ON
echo program_start

:Parameter_Settings
set filePath=c:\New Folder
set delPeriod=3
echo %date%
set curYYYY=%date:~10,4%
set curMM=%date:~7,2%
set curDD=%date:~4,2%

:Set_The_Date_Of_3_Months_Ago
set /A curMM=curMM - %delPeriod%
if "%curMM%" LEQ "0" (
        set /A curMM="(curMM + 12 - %delPeriod%)%%12"
        
if %curMM% == 0 (set curMM=12) ELSE (set curMM=%curMM%)
        set /A curYYYY=curYYYY - 1
)
set curMM=00%curMM%
set curMM=%curMM:~-2%

set curDate=%curYYYY%%curMM%%curDD%

:Loop_Folder_Del_Old_Files
for %%a IN ("%filePath%\*.*") DO (
        set ltdate=%%~ta
        set fileDate=%ltdate:~6,4%%ltdate:~3,2%%ltdate:~0,2%
        if "%fileDate%" LSS "%curDate%" Del /Q "%%a"
)
:end
echo program end
pause

结果

C:\> echo program_start
program_start

C:\>设置filePath = c:\新文件夹

C:\>设置delPeriod = 3

C:\> echo Fri 22/11/2013
星期五22/11/2013

C:\>设置curYYYY = 2013

C:\>设置curMM = 11

C:\>设置curDD = 22

C:\>设置/ A curMM = curMM - 3

C:\>如果“8”LEQ“0”(
set / A curMM =“(curMM + 12 - 3)%12”
 如果8 == 0(设置curMM = 12)ELSE(设置curMM = 8)
 设置/ A curYYYY = curYYYY - 1


C:\>设置curMM = 008

C:\>设置curMM = 08

C:\>设置curDate = 20130822

C:\>表示%a IN(“c:\ New Folder *。*”)DO(
set ltdate =%~ta
 set fileDate = ~6,4%ltdate:~3,2%ltdate:~0,2
 如果“”LSS“20130822”Del / Q“%a”


C:\>(
set ltdate = 22/11/2013 05:36 PM
 set fileDate = ~6,4%ltdate:~3,2%ltdate:~0,2
 if“”LSS“20130822”Del / Q“c:\ New Folder \ New Text Document(2).txt”



C:\>(
set ltdate = 22/11/2013 05:36 PM
 set fileDate = ~6,4%ltdate:~3,2%ltdate:~0,2
 if“”LSS“20130822”Del / Q“c:\ New Folder \ New Text Document.txt”


C:\> echo程序结束
程序结束

C:\>暂停
按任意键继续 。 。

3 个答案:

答案 0 :(得分:1)

使用forfiles删除旧文件可能会更好处理吗?

答案 1 :(得分:0)

您需要启用延迟扩展才能使您的变量在for循环中运行。

添加

 setlocal enabledelayedexpansion

位于bat文件的顶部

然后,使用!var!语法(而不是%var%

引用变量
 if "!fileDate!" LSS "!curDate!" Del /Q "%%a"

答案 2 :(得分:0)

PA的正确答案后,

set /A curMM=curMM - %delPeriod%
if "%curMM%" LEQ "0" (
        set /A curMM="(curMM + 12 - %delPeriod%)%%12"
        if %curMM% == 0 (set curMM=12) ELSE (set curMM=%curMM%)
        set /A curYYYY=curYYYY - 1
)

不可靠,因为currMM可能是0809会产生语法错误,因为批处理假定以0开头的任何数字都是 OCTAL < /强>

set /A curMM=1%curMM% - 100 - %delPeriod%
if %curMM% LEQ 0 (
        set /A curMM=curMM + 12
        set /A curYYYY=curYYYY - 1
)

更好。比较是针对NUMERIC值执行的,而不是字符串值。 curMM的值对于Dec为0,对于11月为-1等等 - 所以简单地添加12并从年中减去1就足够了。