编写一个批处理文件以按日期和时间删除文件夹

2023-12-02

精确重复:

  • 如何编写批处理文件来删除文件夹中 5 天或更早的文件?
  • 编写一个批处理文件以从文件夹中删除 6 天前的文件
  • 编写一个批处理文件以从文件夹中删除 5 天前的文件
  • 如何编写批处理文件来定期删除文件夹和文件?
  • 如何创建按计划删除文件夹的批处理脚本?
  • 编写一个脚本从文件夹中删除比当前日期早 5 天的文件

我在网络服务器上有一个名为“dump”的文件夹。每天都会在该文件夹中保存大量临时文件和文件夹。

我想删除这些文件和子文件夹。条件是我只想删除文件和文件夹前一小时,即运行批处理文件时当前时间之前的一小时。

这意味着我想将我们的文件保留在该文件夹中以运行其他活动。 就像现在这个时间。

  1. 转到文件夹并按时间列出文件
  2. 获取当前时间
  3. 删除比当前时间早1小时的文件

我认为在这种情况下你最好使用 PowerShell 或 WSH(正如 Rihan Meij 提到的)。比较数据和时间是可能的,但非常脆弱(因为无法批量获取文化中立的数据/时间)。你可能会写这样的东西:

setlocal enableextensions
set Now=%date%
set NowTime=%time:~0,-3%
call :tokenize_date %Now%
call :tokenize_time %NowTime%
echo %YEAR%-%MONTH%-%DAY%T%HOUR%:%MINUTE%:%SECOND%
call :one_hour_before %Now% %NowTime%
echo %RESULT_DATE% %RESULT_TIME%
ping -n 1 -w 1500 ::1>NUL
set Now2=%date%
set NowTime2=%time:~0,-3%
call :date_time_compare %Now% %NowTime% %Now2% %NowTime2%
echo %Now%T%NowTime% compared to %Now2%T%NowTime2%: %RESULT%
endlocal
goto :eof

:tokenize_date
    rem assuming ISO 8601 date format YYYY-MM-DD
    setlocal enableextensions
    set arg=%1
    set YEAR=%arg:~0,4%
    set MONTH=%arg:~5,2%
    set DAY=%arg:~8,2%
    endlocal&set YEAR=%YEAR%&set MONTH=%MONTH%&set DAY=%DAY%
goto :eof

:tokenize_time
    rem assuming ISO-8601 time format HH:MM:SS, 24-hour
    setlocal enableextensions
    set arg=%1
    set HOUR=%arg:~0,2%
    set MINUTE=%arg:~3,2%
    set SECOND=%arg:~6,2%
    endlocal&set HOUR=%HOUR%&set MINUTE=%MINUTE%&set SECOND=%SECOND%
goto :eof

:one_hour_before
    rem gets a date as %1 and a time as %2
    rem returns a date in RESULT_DATE and a time in RESULT_TIME
    setlocal enabledelayedexpansion enableextensions
    set months=31 28 31 30 31 30 31 31 30 31 30 31
    set i=0
    for %%x in (%months%) do (
        set /a i+=1
        set month_length_!i!=%%x
    )
    call :tokenize_date %1
    call :tokenize_time %2
    set /a HOUR-=1
    if %HOUR% LSS 0 (
        set /a DAY-=1
        set /a HOUR+=24
        if %DAY% LSS 0 (
            set /a MONTH-=1
            if %MONTH% LSS 0 (
                set /a YEAR-=1
                set /a MONTH+=12
            )
            set /a DAY+=month_length_!MONTH!
        )
    )
    endlocal&set RESULT_DATE=%YEAR%-%MONTH%-%DAY%&set RESULT_TIME=%HOUR%:%MINUTE%:%SECOND%
goto :eof

:date_time_compare
    rem expects %1 - date 1, %2 - time 1, %3 - date 2, %4 - time 2
    rem returns a value < 0 if datetime1 is earlier than datetime2
    rem                 > 0                 later than
    rem                 = 0                 equal to
    rem the return value is saved in the variable %RETURN%
    setlocal enableextensions
    call :tokenize_date %3
    call :tokenize_time %4
    set YEAR2=%YEAR%
    set MONTH2=%MONTH%
    set DAY2=%DAY%
    set HOUR2=%HOUR%
    set MINUTE2=%MINUTE%
    set SECOND2=%SECOND%
    call :tokenize_date %1
    call :tokenize_time %2
    if %YEAR2% GTR %YEAR% (endlocal&set RESULT=-1&goto :eof) else (
        if %YEAR2% LSS %YEAR% (endlocal&set RESULT=1&goto :eof) else (
            if %MONTH2%%DAY2%%HOUR2%%MINUTE2%%SECOND2% GTR %MONTH%%DAY%%HOUR%%MINUTE%%SECOND% (
                endlocal&set RESULT=-1&goto :eof
            ) else (
                if %MONTH2%%DAY2%%HOUR2%%MINUTE2%%SECOND2%==%MONTH%%DAY%%HOUR%%MINUTE%%SECOND% (
                    endlocal&set RESULT=0&goto :eof
                ) else (
                    endlocal&set RESULT=1&goto :eof
                )
            )
        )
    )
goto :eof

抱歉,时间有点长了。比较日期/时间目前仅经过部分测试,但应该可行。当它包含亚秒时要小心,因为它们在这里引入了一个逗号,这会扰乱被调用子例程的参数顺序(因此%time:~0,-3%以避免这种情况)。

之后您可以使用%~tI扩展以获取日期和时间,将它们与当前减去一小时进行比较,并删除(如果适用)。

注 1:我假设 ISO 8601 日期和时间格式为 24 小时,这就是我在这里使用的格式。对于非标准日期格式,您必须稍微更改子例程(但 12 小时时间可能会很痛苦)。

注 2:目前,代码不关心闰年。还需要 5 或 6 行代码:one_hour_before, 我认为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写一个批处理文件以按日期和时间删除文件夹 的相关文章

随机推荐

  • 盖茨比 4 + Netlify

    由于以下错误 无法在 Netlify 上运行 gatsby 4 4 07 59 PM success run queries in workers 158 327s 621 621 3 92 s 4 16 57 PM error UNHAN
  • 如何在Android中从开火中检索聊天记录

    我有一个聊天应用程序 我想在其中检索两个用户之间的聊天历史记录 我有一个用于检索聊天消息的节 那就是
  • 无效的程序计数器值:0

    我目前正在 MIPS 处理器下使用汇编语言 我现在在 使用 MARS 模拟器 由于未知的原因 我每次运行后都会收到以下错误消息 Go 运行 try s 错误 无效的程序计数器值 0 Go 执行因错误而终止 我收到此错误消息 与我正在使用的代
  • 我的 VS CODE 扩展代码运行器无法正常工作

    您好 我的问题是 在我的 Visual Studio 代码中 我的代码运行器扩展不提供任何输出 我看过很多教程 并完成了所有工作 研究 下载 Node js 并将文件保存为 JavaScript 文件并验证路径 我输入了 console l
  • 我应该将 JavaScript 放在哪里 - 页面还是外部文件?

    在 VS 2008 中 我有一个 ASP NET 内容页面 其中有一个母版页 我想为此页面添加用于客户端验证等的 JavaScript 函数 我的问题是 我应该将这些脚本单独编写吗 js文件 或嵌入到 aspx file 这种选择会影响网站
  • GCM 消息被覆盖

    我正在使用 GCM 推送通知向用户传递一些通知 我的问题是 当我发送一条消息时 如果发送多条消息 则效果很好 然后最后一条消息会显示给所有通知 我哪里做错了 private static void generateNotification
  • MonoTouch:从 Obj-C 到 MonoTouch

    我正在尝试从现有的 Objective C 项目调用 MonoTouch 程序集 我找到了这篇文章 在那里它很好地描述了这些步骤 但是当我尝试在 XCode 中构建项目时 我收到以下错误 错误 没有指定名称或路径的 SDK Develope
  • 模型关联问题

    因此 我正在实施一个向上 向下投票机制 并为其生成一个模型 到目前为止 我了解到一个视频 将投票的内容 有一个 vote count 而 vote count 属于视频 但是 我还想在 vote count 数据库中跟踪对视频投票的用户 这
  • 为什么我的 LINQ INSERTS 没有在 SQL Server CE 3.5 中保留?

    我将 LINQ to SQL 与 Sql Server Compact Edition 3 5 和 VS2008 一起使用 我有一个非常简单的表 Tokens 其中包含唯一标识符主键 TokenID 和其他两个可为空的字段 UsedBy 和
  • RecyclerView 在新行中显示以前在 EditText 中输入的值

    我正在创建一个 Android 应用程序 我在其中使用recyclerView并且 recyclerView 的行有editText 这是我的ReadingAdapter class public class ReadingAdapter
  • 如何在jdbc postgresql准备好的语句中多次使用相同的值

    有没有办法在 jdbc postgresql 驱动程序的准备语句中多次使用相同的变量 例如 我想使用以下语句 但每个问号具有相同的值 PreparedStatement ps pg prepareCall SELECT FROM mytab
  • xsl for-each:每 n 行添加代码块?

    我正在尝试将一些代表图像库的 xml 转换为 html 表 必须使用 html 而不是 css 来完成 如何添加换行符 tr 每六列左右有 xsl 吗 我有这个 tr
  • 旋转SCNNode相对局部坐标

    我正在尝试旋转节点SCNAction 但它相对于父级的坐标空间旋转 是否可以相对局部坐标系旋转节点 当然 您可以使用以下命令获取父级旋转轴的空间坐标转换向量 method 例如 此操作将绕局部 x 轴旋转 180 度 SCNAction r
  • Linq 中的三元运算符

    var result from payroll in currentMonthPayroll select new SalaryDifference PreviousMonthSalary previousMonthPayroll Wher
  • 静态和非静态字段

    只是为了澄清我的想法是对的 在java中静态字段是一个被整个类使用的变量 字段 或者可以被引用该类的所有对象使用 非静态字段是由对象定义的变量吗 引用与对象 1 相同的类的第二个对象可以具有与对象 1 的静态字段不同的值吗 与实例变量不同
  • 合并日期范围

    这里是 Oracle SQL 新手 也是第一次发布海报 我以为这很简单 直到我意识到我无法弄清楚如何拆分返回作业 这是我的分配表 ASGN ID ST DT END DT POS LOCN STATUS WAGE CD A 12 31 20
  • 如何回显公共文件夹之外的图像

    在此项目中 我将管理员提交的文件上传到公共文件夹之外的文件夹 web the public folder upload uploading image to this which is at the same level as the pu
  • 在 ggplot2 中显示频率和条形图

    我正在尝试在条形图中显示频率 好吧 我想要它们某处在图表中 条形下方 条形内 条形上方或图例区域中 我记得 我可能是错的 它可以在ggplot2 这可能是一个简单的问题 至少看起来很容易 这是代码 p lt ggplot mtcars p
  • 使用方法 update_all

    假设我有一个模型 class Result lt ActiveRecord Base attr accessible x y sum end 而不是做 Result all find each do s s sum compute sum
  • 编写一个批处理文件以按日期和时间删除文件夹

    精确重复 如何编写批处理文件来删除文件夹中 5 天或更早的文件 编写一个批处理文件以从文件夹中删除 6 天前的文件 编写一个批处理文件以从文件夹中删除 5 天前的文件 如何编写批处理文件来定期删除文件夹和文件 如何创建按计划删除文件夹的批处