获取上次修改文件的属性在文件中编写的目录中

时间:2017-02-03 15:02:46

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

我需要一个批处理脚本来检查驱动器(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个小时)。我认为这可以很容易地完成,也就是说,如果你知道如何...任何好的建议?任何回复将不胜感激!提前谢谢。

2 个答案:

答案 0 :(得分:0)

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

我认为您希望找到扩展名为.CZI的最近修改过的文件,并仅将该最新文件复制到某个目标目标。

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

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

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

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

答案 1 :(得分:0)

假设只需要从目录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 以禁止它,因此必须使用>转义重定向运算符^以将其解释为重定向运算符on执行 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