【问题标题】:Getting the attributes of the last modified file in a directory written in a file获取写入文件的目录中最后修改文件的属性
【发布时间】:2017-02-03 15:02:46
【问题描述】:

我需要一个批处理脚本来检查驱动器 (D:) 中 *.czi 文件(Carl Zeiss 图像文件)的“上次修改”属性,并将数据附加到另一个驱动器上的文件中。我尝试了以下行的解决方案:

FOR /F "delims=" %%I IN ('DIR %source%*.czi /A:-D /O:-D /T:W /B') DO COPY "%%I" > %target%

这确实给了我最后一个文件,但它复制了整个文件,这不是那么聪明,因为它们可能很大。作为一名生物学家,我会原谅你我绝望的尝试但没有奏效(花了 4-5 小时)。我认为这可以很容易地完成,也就是说,如果你知道如何......有什么好的建议吗?任何回复将不胜感激!提前致谢。

【问题讨论】:

  • 定义属性的含义,最好将这些信息附加到您的问题中。
  • 你想附加到目标文件的“数据”是什么? *.czi 文件的内容或“上次修改”属性?
  • 由于您正在执行dir /o-d,您的命令应该将第一个修改的文件复制到target,方法是从last开始依次复制每个文件。您需要使用 >> 代替 > 来附加数据。文件“%%I”将是找到的文件名,但将从当前目录执行复制,该目录可能不是source。您应该使用"%source%%%I" 来包含源目录名称。我建议您编辑您的问题以澄清问题。你只是想用最后一个文件替换target,还是将最后一个文件附加到它,或者它是第一个文件?

标签: batch-file last-modified file-attributes


【解决方案1】:

假设在C:\Temp 目录中的所有 *.czi 文件中只需要最新文件的最后修改文件时间,例如:

30.01.2017  08:13  First Listed.czi
28.01.2017  21:26  Oldest Image.czi
03.02.2017  17:13  Newest Image.czi

此任务的批处理代码可能是:

@echo off
set "Source=C:\Temp\"
set "Target=%Source%List.txt"
for /F "delims=" %%I in ('dir "%Source%*.czi" /A:-D /B /O:-D /T:W 2^>nul') do (
   echo File "%%I" last modified on %%~tI>>"%Target%"
   goto AfterLoop
)
:AfterLoop

DIR命令在C:\Temp目录中搜索*.czi文件,并输出按最后修改时间从新到旧倒序排列的列表。

如果找不到 *.czi 文件,命令 DIR 将输出错误消息来处理 STDERR。此输出消息使用 2>nul 重定向到设备 NUL 以抑制它,因此重定向运算符 > 必须在此处转义为 ^ 以在执行 DIR 时被解释为重定向运算符 命令行,但尚未解析 FOR 命令行。

%%I 引用文件名作为 DIR 的输出,%%~tI 引用文件的最后修改日期。在命令提示符窗口for /? 中运行命令FOR 输出的帮助解释了这些修饰符。

如果由于使用>> 而不是仅> 而已经存在,则在将文本重定向到附加该行的目标文件的第一次输出后退出循环。

对于示例文件列表,将以下行附加到C:\Temp\List.txt

File "Newest Image.czi" last modified on 03.02.2017 17:13

要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • dir /?
  • echo /?
  • for /?
  • goto /?
  • set /?

另请参阅 Microsoft 文章 Using command redirection operators

【讨论】:

    【解决方案2】:

    你的问题不清楚,所以让我试着改写一下:

    我想你想找到带有 .CZI 扩展名的最近修改的文件,然后只将最新的文件复制到某个目标位置。

    列出所有子目录中的所有 .CZI 文件,按最新文件优先排序:

    (for /f %a in ('dir *.CZI /s /b') do @echo %~ta %~fa) | sort
    

    如果此输出的第一行是您想要的文件,那么您需要做的就是将该文件复制到您的目标。

    (请花时间写出详细而清晰的问题,以便我们提供好的答案)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2011-10-03
      相关资源
      最近更新 更多