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