找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 90165|回复: 23

[日期时间] 批处理如何删除指定日期之前的文件夹?

[复制链接]
发表于 2017-7-24 17:09:39 | 显示全部楼层 |阅读模式
求助,怎样删除某个文件夹下,今天之前的所有文件夹(不是文件)。
发表于 2017-7-25 23:05:22 | 显示全部楼层
 楼主| 发表于 2017-7-26 18:35:06 | 显示全部楼层
本帖最后由 breeze_li 于 2017-7-26 18:36 编辑

回复 2# Batcher
E:\>rem 指定待删除文件夹的存放路径

E:\>set SrcDir=E:\asdf

E:\>rem 指定天数

E:\>set DaysAgo=1

E:\>for /F "skip=2 delims=" %a in ('reg query "HKEY_CURRENT_USER\Control Panel\I
nternational" /v sShortDate') do (set "RegDateOld=%a" )

E:\>(set "RegDateOld=    sShortDate    REG_SZ    yyyy-M-d" )

E:\>set RegDateOld=yyyy-M-d

E:\>reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG
_SZ /d yyyy-M-d /f 1>nul

E:\>echo LastDate=date()-1 1>"C:\Users\Administrator\AppData\Local\Temp\DstDate.
vbs"

E:\>echo FmtDate=right(year(LastDate),4) & right("0" & month(LastDate),2) & righ
t("0" & day(LastDate),2) 1>>"C:\Users\Administrator\AppData\Local\Temp\DstDate.v
bs"

E:\>echo wscript.echo FmtDate 1>>"C:\Users\Administrator\AppData\Local\Temp\DstD
ate.vbs"

E:\>for /F %a in ('cscript /nologo "C:\Users\Administrator\AppData\Local\Temp\Ds
tDate.vbs"') do (set "DstDate=%a" )

E:\>(set "DstDate=20170725" )

E:\>set DstDate=2017-07-25
命令语法不正确。

E:\>        if exist "%a\"

E:\>

请问,这是哪里有问题?
发表于 2017-7-27 22:37:26 | 显示全部楼层
回复 3# breeze_li


    请把你测试用的bat文件压缩之后传上来我看看
 楼主| 发表于 2017-7-28 09:03:06 | 显示全部楼层
回复 4# Batcher    这个是测试文件
发表于 2017-7-28 11:36:10 | 显示全部楼层
回复 5# breeze_li


3楼的报错信息看不出具体哪个命令在报错,单独执行这段有问题吗?
  1. >"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
  2. >>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
  3. >>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
  4. for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
  5.     set "DstDate=%%a"
  6. )
  7. set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  8. echo %DstDate%
复制代码
 楼主| 发表于 2017-7-28 15:09:01 | 显示全部楼层
回复 6# Batcher


C:\>test.bat

C:\>echo LastDate=date()- 1>"C:\Users\Administrator\AppData\Local\Temp\DstDate.v
bs"

C:\>echo FmtDate=right(year(LastDate),4) & right("0" & month(LastDate),2) & righ
t("0" & day(LastDate),2) 1>>"C:\Users\Administrator\AppData\Local\Temp\DstDate.v
bs"

C:\>echo wscript.echo FmtDate 1>>"C:\Users\Administrator\AppData\Local\Temp\DstD
ate.vbs"

C:\>for /F %a in ('cscript /nologo "C:\Users\Administrator\AppData\Local\Temp\Ds
tDate.vbs"') do (set "DstDate=%a" )
C:\Users\Administrator\AppData\Local\Temp\DstDate.vbs(1, 17) Microsoft VBScript
编译器错误: 语法错误


C:\>set DstDate=~0,4DstDate:~4,2DstDate:~6,2

C:\>echo ~0,4DstDate:~4,2DstDate:~6,2
~0,4DstDate:~4,2DstDate:~6,2
发表于 2017-7-28 15:59:02 | 显示全部楼层
回复 7# breeze_li


C:\Users\Administrator\AppData\Local\Temp\DstDate.vbs
把这个文件压缩传上来我看看
你用的什么版本的操作系统?
 楼主| 发表于 2017-7-28 16:12:50 | 显示全部楼层
回复 8# Batcher
发表于 2017-7-28 21:59:44 | 显示全部楼层
回复 9# breeze_li
  1. set DaysAgo=1
  2. >"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
  3. >>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
  4. >>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
  5. for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
  6.     set "DstDate=%%a"
  7. )
  8. set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  9. echo %DstDate%
复制代码
这样呢?
 楼主| 发表于 2017-7-31 09:00:01 | 显示全部楼层
回复 10# Batcher
C:\>test2.bat

C:\>set DaysAgo=1

C:\>echo LastDate=date()-1 1>"C:\Users\Administrator\AppData\Local\Temp\DstDate.
vbs"

C:\>echo FmtDate=right(year(LastDate),4) & right("0" & month(LastDate),2) & righ
t("0" & day(LastDate),2) 1>>"C:\Users\Administrator\AppData\Local\Temp\DstDate.v
bs"

C:\>echo wscript.echo FmtDate 1>>"C:\Users\Administrator\AppData\Local\Temp\DstD
ate.vbs"

C:\>for /F %a in ('cscript /nologo "C:\Users\Administrator\AppData\Local\Temp\Ds
tDate.vbs"') do (set "DstDate=%a" )

C:\>(set "DstDate=20170730" )

C:\>set DstDate=2017-07-30

C:\>echo 2017-07-30
2017-07-30

C:\>
好像是没报错
发表于 2017-7-31 09:02:24 | 显示全部楼层
回复 11# breeze_li


    其它代码慢慢往上加,看看加到哪句的时候会报错。
 楼主| 发表于 2017-7-31 15:10:29 | 显示全部楼层
回复 12# Batcher

for /d %%a in ("%SrcDir%\*.*") do (
    if "%%~ta" leq "%DstDate%" (
        if exist "%%a\"
            echo rd /s /q "%%a"
        )
    )
)
加上这一句会报错,

命令语法不正确。

C:\>        if exist "%a\"
发表于 2017-7-31 15:51:04 | 显示全部楼层
回复 13# breeze_li
  1. for /d %%a in ("%SrcDir%\*.*") do (
  2.     REM 看看这几个变量的值
  3.     echo %SrcDir%
  4.     echo %%a
  5.     echo %%~ta
  6.     echo %DstDate%
  7.     if "%%~ta" leq "%DstDate%" (
  8.         if exist "%%a"
  9.             echo rd /s /q "%%a"
  10.         )
  11.     )
  12. )
复制代码
 楼主| 发表于 2017-7-31 16:24:04 | 显示全部楼层
回复 14# Batcher
for /d %%a in ("%SrcDir%\*.*") do (
    REM 看看这几个变量的值
    echo %SrcDir%
    echo %%a
    echo %%~ta
    echo %DstDate%
    if "%%~ta" leq "%DstDate%" (
        if exist "%%a\"
            echo rd /s /q "%%a"
        )
    )
)
运行这段会直接报错,如果去掉
if "%%~ta" leq "%DstDate%" (
        if exist "%%a\"
            echo rd /s /q "%%a"
        )
    )
这段,那四个变量都能打印出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 22:34 , Processed in 0.021268 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表