首页 文章

Windows Bat Del旧文件

提问于
浏览
0

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

Source Code

: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

Result

C:> echo program_start
program_start

C:> set filePath = c:\ New Folder

C:> set delPeriod = 3

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

C:>设置curYYYY = 2013

C:>设置curMM = 11

C:>设置curDD = 22

C:> set / A curMM = curMM - 3

C:> if "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:> set 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

    也许使用 forfiles 删除旧文件可以更好地处理?

  • 1

    您需要 enable delayed expansion 使您的变量在 for 循环内工作 .

    setlocal enabledelayedexpansion
    

    在你的bat文件的顶部

    然后,使用 !var! 语法(而不是 %var% )引用变量

    if "!fileDate!" LSS "!curDate!" Del /Q "%%a"
    
  • 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足够且更清楚 .

相关问题