批处理文件:迭代自给定日期以来修改的文件

2023-12-12

我想创建一个批处理文件,该文件对与某个日期以来修改的通配符(例如 *.jpg)匹配的每个文件执行命令(作为一个简单的示例,删除文件,尽管我的命令是自定义/不同的) 2010 年 1 月 1 日或之后)。该日期可以硬编码在批处理文件中,也可以作为命令行参数传递。

伪代码:

foreach file C:\Images\*.jpg modified-since 1-1-2010 do
del file

我更喜欢纯批处理文件,而不是 PowerShell、VBScript 等。如果无法使用纯批处理语言,我可以使用小型/免费的第三方命令行程序来帮助生成修改后的文件列表。我需要支持在 Windows 2000 或更高版本中运行。


我最终使用的解决方案:

(根据pipitas的答案稍作修改)

@ECHO OFF
for /f "usebackq tokens=1-7* delims=/: " %%I in (`dir/o-d/tw ^| findstr /I .jpg`) do (
  if "%%K%%I%%J %%N %%L%%M" GEQ "20100801 AM 0000" (
    del /P %%P
  )
)

一些注意事项:删除 /P 以便每次删除时不需要 Y/N 确认。我转义了 % 字符,以便它们可以在 .bat 文件中工作。 ^ 是转义管道所必需的。 “usebackq”使反引号分隔要执行的命令(而不是搜索文字字符串或文件),令牌设置变量的数量以将解析的行放置在以 %I 开头,delims 设置分隔符(包括尾随空格) )用于将行解析为这些标记。

我添加 .jpg 作为 findstr 搜索字符串,因为我只想处理 .jpg 文件。一些可能的问题是,您的区域设置可能会以不同的方式打印日期,需要不同数量的变量或不同的分隔符,并且您可能会在文件名中嵌入“.jpg”(需要 findstr 正则表达式等),从而出现一些误报匹配。 。

如果您不需要支持 Windows 2000 及更早版本,请使用forfiles正如约翰内斯所建议的那样,这会让这变得容易得多。


首先做一些准备工作:

  • dir /od /tw /s ..\path\to\somedir: 列出目录的所有文件+子目录,按上次修改的日期+时间排序,
  • dir /o-d /tw /s ..\path\to\somedir: 相同,但顺序相反(最旧的最后)。

接下来,我使用现有路径的本地示例。我们走吧:

dir /tc /o-d /s gstmp\*yell*.tif ^| findstr 2010
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: D479-1658

 Verzeichnis von C:\downloads\gstmp

08/06/2010  05:01 PM           19 compression-g4-emptypage-tiffsep1(Yellow).tif
08/06/2010  05:00 PM           19 compression-lzw-emptypage-tiffsep1(Yellow).tif
08/06/2010  04:57 PM           19 compression-g3-tiffsep1(Yellow).tif
08/06/2010  04:57 PM           19 compression-crle-tiffsep1(Yellow).tif
08/06/2010  04:56 PM           19 compression-pack-share-tiffsep1(Yellow).tif
08/06/2010  04:53 PM           19 compression-g4-share-tiffsep1(Yellow).tif
08/06/2010  04:52 PM           19 compression-lzw-share-tiffsep1(Yellow).tif
08/06/2010  04:51 PM           19 compression-default-share-tiffsep1(Yellow).tif
08/06/2010  03:59 PM           19 compression-none-share-tiffsep.Yellow.tif
08/06/2010  03:55 PM           19 share-tiffsep.Yellow.tif
              10 Datei(en)       190 Bytes

目前我们不喜欢额外的标题和摘要信息。我们可以通过过滤某些东西来摆脱这个问题。我将简单地使用“2010”。

但现在真正的问题开始了:创建日期和时间可能会以不同的格式打印,具体取决于您的“区域设置”。你可以看到你自己,看看我现在的样子。

如果我们可以使日期以与数字顺序完全匹配的格式显示,这不是可行吗?然后我们可以实现一些逻辑,通过简单的数字比较来决定删除。让我们尝试一下(如果这对我有用,则不一定对您有用 - 您可能需要适应您的语言环境)。请注意我使用的“反引号”(“``”)以及 ^ 符号:

for /f "usebackq tokens=1-7* delims=/: " %I in (`dir/tc/o-d/s gstmp\*yell*.tif ^
   ^| findstr 2010`) do echo.    %I %J %K %L %M %N %O %P

此处输出:

08 06 2010 05 01 PM 19 compression-g4-emptypage-tiffsep1(Yellow).tif
08 06 2010 05 00 PM 19 compression-lzw-emptypage-tiffsep1(Yellow).tif
08 06 2010 04 57 PM 19 compression-g3-tiffsep1(Yellow).tif
08 06 2010 04 57 PM 19 compression-crle-tiffsep1(Yellow).tif
08 06 2010 04 56 PM 19 compression-pack-share-tiffsep1(Yellow).tif
08 06 2010 04 53 PM 19 compression-g4-share-tiffsep1(Yellow).tif
08 06 2010 04 52 PM 19 compression-lzw-share-tiffsep1(Yellow).tif
08 06 2010 04 51 PM 19 compression-default-share-tiffsep1(Yellow).tif
08 06 2010 03 59 PM 19 compression-none-share-tiffsep.Yellow.tif
08 06 2010 03 55 PM 19 share-tiffsep.Yellow.tif

我们已经快到了,但还没有完全实现。我们需要更改令牌的顺序%I %J %K to %K %I %J这样我们的日期显示为2010 08 06代替08 06 2010。另外,如果我们编写不带空格的正确标记,我们将得到一个日期+时间字符串,以便可以轻松进行比较。另外,我们跳过%O并将其替换为箭头,只是为了好玩:

for /f "usebackq tokens=1-7* delims=/: " %I in (`dir/tc/o-d/s gstmp\*yell*.tif ^
   ^| findstr 2010`) do echo.    %K%I%J%L%M%N ==^> %P

输出现在更改为:

201008060501PM ==> compression-g4-emptypage-tiffsep1(Yellow).tif
201008060500PM ==> compression-lzw-emptypage-tiffsep1(Yellow).tif
201008060457PM ==> compression-g3-tiffsep1(Yellow).tif
201008060457PM ==> compression-crle-tiffsep1(Yellow).tif
201008060456PM ==> compression-pack-share-tiffsep1(Yellow).tif
201008060453PM ==> compression-g4-share-tiffsep1(Yellow).tif
201008060452PM ==> compression-lzw-share-tiffsep1(Yellow).tif
201008060451PM ==> compression-default-share-tiffsep1(Yellow).tif
201008060359PM ==> compression-none-share-tiffsep.Yellow.tif
201008060355PM ==> share-tiffsep.Yellow.tif

现在您几乎准备好比较第一个字段了。

但考虑一下:我以 12 小时为周期计算时间,其中AM and PM。因此,为了进行数值比较,我们必须将 PM 和 AM 分别替换为数值,这样我们的翻译04:51 AM and 04:50 PM仍然会以正确的方式进行数字排序。

现在这个怎么样:

for /f "usebackq tokens=1-7* delims=/: " %I in (`dir/tc/o-d/s gstmp\*yell*.tif ^
     ^| findstr 2010`) do  (
        if "%K%I%J %N %L%M" GEQ "20100806 PM 0457"  (
            echo.   [ %K-%I-%J %L:%M %N    %P. ]
        )
 )

这列出了所有应删除的文件,还显示了它们各自的日期。到really删除,我们只需替换最后一个即可echo. ... %P. by a del/p/f/s %P.

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

批处理文件:迭代自给定日期以来修改的文件 的相关文章

  • 如何使用 PHP 查找目录中的前 5 个文件?

    如何使用 PHP 列出按字母顺序排序的目录中的前 5 个文件或目录 Using scandir array slice array filter scandir path to dir is file 0 5 The array filte
  • 如何使用额外标记输出 wp_list_categories

    我目前正在使用下面的脚本在无序列表中输出我的所有 WordPress 类别 如何获得带有额外标记的输出 ul ul 例如 ul li Category 1 rsaquo li li Category 2 rsaquo li ul 代替 ul
  • 将日期时间显示为 MM/dd/yyyy HH:mm 格式 C#

    在数据库中 日期时间以 MM dd yyyy HH mm ss 格式存储 但是 我想以 MM dd yyyy HH mm 格式显示日期时间 我通过使用 String Format 进行了尝试 txtCampaignStartDate Tex
  • 将时间添加到日期时间

    我有一个像这样的日期字符串 然后使用strptime 所以就像这样 my time datetime datetime strptime 07 05 15 m d Y 现在我想添加 23 小时 59 分钟my time 我努力了 timed
  • PHP 文件上传帮助

    div align center div 这是我的代码
  • Java/MongoDB 按日期查询

    我将一个值作为 java util Date 存储在我的集合中 但是当我查询以获取两个特定日期之间的值时 我最终得到的值超出了范围 这是我的代码 插入 BasicDBObject object new BasicDBObject objec
  • 如何在 Java 中获取 UTC+0 格式的日期? [复制]

    这个问题在这里已经有答案了 我使用以下代码获取 ISO 8601 格式的日期 对于 UTC 返回的值不包含偏移量 OffsetDateTime dateTime OffsetDateTime ofInstant Instant ofEpoc
  • 如何在函数执行后停止 tkinter?

    我在停止 提要 时遇到问题 cancel 参数似乎对 after 方法没有任何影响 尽管 feed stop 被打印到控制台 我正在尝试使用一个按钮来启动源 另一个按钮来停止源 from Tkinter import Tk Button i
  • 如何使用 Oracle 移动文本文件

    我有两个问题 1 如何从文件夹中移动文本文件 C Data inbox test txt 目标文件夹 C Data outbox test txt 2 如何获取文件夹中的目录文件列表 C Data inbox 谢谢 Oracle 提供了一个
  • emacs 是否有类似 vims 的 NERDtree 之类的东西

    对于 vim 有一个名为 NERDtree 的文件系统浏览器 https github com scrooloose nerdtree https github com scrooloose nerdtree Emacs 确实存在替代或更好
  • H2 SQL 日期比较

    在 H2 数据库中 如何在 TIMESTAMP 类型的列上运行查询 SELECT FROM RECORDS WHERE TRAN DATE lt 2012 07 24 Try 2012 07 24
  • `SystemTime::now` 是否受夏令时影响?

    在时间 T 我调用SystemTime now duration since UNIX EPOCH 在时间 T 10 当夏令时开始时 我调用相同的调用 我可以预期这两个实例之间会出现任何奇怪的行为吗 SystemTime本身完全独立于时区
  • 嵌套循环结果

    我真的不知道如何找出嵌套循环的结果 例如 在下面的伪代码中 我无法弄清楚执行结束时会给出什么 如果有人给我一个简单的解决方案 我会很高兴 r lt 0 for i lt 1 to n do for j lt 1 to i do for k
  • jQuery / Ajax:如何循环遍历数组作为 Ajax 成功函数的一部分

    我有一个阿贾克斯调用返回一个数组并需要对该数组中的每个值执行某些操作 到目前为止 我有以下内容 但这会返回以下错误 Uncaught TypeError Cannot use in operator to search for length
  • 通过 Python 循环浏览网络上的目录并显示其内容(文件和其他目录)

    同样的道理在Python中处理从源目录到目标目录的一组文件 https stackoverflow com questions 2593399 process a set of files from a source directory t
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 来自 file_descriptor_source (boost::iostreams) 或文件的 istream

    我需要为我的程序输入做这样的事情 stream input if decompressed input open filepath else file descriptor popen decompressor filepath r inp
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • C# 将数据写入 CSV 文件

    我正在尝试写入csv使用 C 语言逐行文件 这是我的功能 string first reader 0 ToString string second image ToString string csv string Format 0 1 n
  • 如何将 Hudson/Jenkins 参数传递给 Windows 批处理命令

    好吧 我需要在我的 Hudson 作业中执行一个批处理文件 我有一个参数 Jenkis 参数 我需要将这个值 如参数 传递给批处理文件 我尝试了以下操作 Deploy cmd configuration DEPLOYCONFIGURATIO

随机推荐

  • nginx 每天崩溃并且 error.log 没有显示任何内容

    我有一个 nginx 服务器设置作为反向代理 似乎每天都会崩溃 服务器之前从来没有任何问题 但最近 大约一个月前 我开始注意到 nginx 没有运行 我必须登录服务器才能再次启动该进程 我无法在日志中找到任何有用的内容 如果您能帮助诊断该问
  • .ASPX 上的自定义用户控件和友好属性项集合(如 ListBox 和 ListItems,但带有 L​​ist

    我很长时间以来一直想知道如何为用户控件创建一个公共属性 该属性类似于 NET 本机项的集合属性 例如 ListBox 和 ListItems
  • 如何从 HttpRequestException 获取 JSON 错误消息

    我遇到一种情况 我必须提取响应 HttpResponseMessage in a catch声明但我认为无法完成 使用await捕获 另外 如果我在 catch 之后执行此操作 HttpResponseMessage消息被 已处理 代码 p
  • 方法“moveActiveSheet”在 Google Apps 脚本 (JavaScript) 中无法按预期工作

    我正在用 Google Apps 脚本编写脚本 目标 允许用户按照每个工作表名称中的日期对 Google 电子表格中的工作表 标签进行排序 function sorter var sp SpreadsheetApp getActiveSpr
  • 为什么不可变类提供变异器?

    考虑以下代码 bdval new BigDecimal strval new MathContext attrib getPrecision bdval setScale attrib getScale RoundingMode HALF
  • Android 运行时和空点异常

    我在一个名为 ParseInitialization java 的类中进行了 Parse 初始化 该类扩展了 Application 并且在运行我的应用程序 MainActivity java 时 我得到了 RuntimeException
  • IMAP 空闲如何工作?

    有人可以向我解释一下 IMAP IDLE 是如何工作的吗 它是否会为它打开的每个连接创建一个新进程 我可以以某种方式使用 eventmachine 吗 我正在尝试通过后台工作人员在 Heroku 上的 ruby 中实现它 有什么想法吗 在
  • 如何使用 Wix 工具集在重大升级期间显式删除 dll

    我们正在尝试为我们的产品部署更新 其中包含更新的 dll 该 dll 也有一个版本号 因此通常安装程序应该能够看到它并替换旧的 dll Windows 安装程序在检查版本号时只关心前三个数字 然而 在这种情况下 更新后的版本号看起来与第四个
  • 类型错误:“长”对象不可迭代

    我刚刚用 python 创建了一本字典 stb info self stb type print type stb info The output gives me dict 当我想为每个组运行我的踩踏功能时 for group no sh
  • 单个查询中的多个 select 语句

    我正在 php mysql 中生成报告 ex select count id as tot user from user table select count id as tot cat from cat table select coun
  • 元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引

    在 React 项目中尝试 TypeScript 时 我遇到了这个错误 Element implicitly has an any type because expression of type string can t be used t
  • 在 PHP 中验证英国电话号码

    我购买了联系表 很棒的小事情 但我需要转换电话号码的验证以允许英国号码格式 换句话说 允许空格 现在它的验证不带空格 最小长度为 8 个字符 if is numeric phone if phone strlen phone lt 8 er
  • Java 中简单文件(行计数)函数的 API

    你好 给定一个任意文件 java 我想计算行数 这很简单 例如 使用 Apache 的 FileUtils readLines 方法 然而 对于大文件 就地读取整个文件是可笑的 即仅计算行数 一种自行开发的选项 创建 BufferedRea
  • 来自 2D 数组的 C++ 16 位灰度梯度图像

    我目前正在尝试构建 16 位灰度 渐变 图像 但我的输出看起来很奇怪 所以我显然没有正确理解这一点 我希望有人能就我的问题提供一些知识 我认为我写的 位图 是错误的 但我不确定 include CImg h using namespace
  • Windows Azure 是否具有与 AWS Identity Access Management 相当的功能?

    因此 我有一个使用 AWS 的 IAM 基础设施的移动应用程序 它可以有效地允许我向匿名移动设备提供临时访问令牌 以便它们可以直接从移动设备对 AWS 服务运行查询 有谁知道 Windows Azure 是否也有此类东西的替代品 我读过有关
  • Android HttpResponse响应代码[重复]

    这个问题在这里已经有答案了 我正在尝试获取 HttpResponse 的响应代码 没有直接获取响应代码的方法 HttpResponse getStatusLine getStatusCode 就是您正在寻找的
  • “background-attachment:fixed”的解决方法在 iOS4 中不起作用

    我正在努力获取具有固定背景图像的网页 因此当页面在 UIWebView 中滚动时图像不会移动 我发现的是 background attachment fixed不适用于 iOS4 使用 4 2 1 为了仔细检查 我已经准备了一个页面 其中包
  • setTimeOut 参数传递

    在 JavaScript 中我想使用setTimeOut 像这样的功能 最好的方法是通过匿名function设置超时 这个匿名函数将能够访问id setTimeout function showGrid id 5000 将字符串传递给set
  • 使用 Objective-C 执行 PHP 脚本

    我正在尝试执行一个 PHP 脚本来增加数据库中的字段 我的脚本正在运行 并且我目前正在使用 ASIHTTPRequest 完美地修改数据库 但我觉得我应该使用不同的方法 因为我不需要返回 这就是所谓的 HTTP POST 吗 increme
  • 批处理文件:迭代自给定日期以来修改的文件

    我想创建一个批处理文件 该文件对与某个日期以来修改的通配符 例如 jpg 匹配的每个文件执行命令 作为一个简单的示例 删除文件 尽管我的命令是自定义 不同的 2010 年 1 月 1 日或之后 该日期可以硬编码在批处理文件中 也可以作为命令