2017-02-03 23 views
0

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

+1

定义您的属性意味着什么,最好是将该信息附加到您的问题。 – Compo

+1

还有什么是你想追加到目标文件的“数据”? * .czi文件或'最后修改'属性的内容? –

+1

由于您正在执行'dir/o-d',因此您的命令应该先将最先修改的文件复制到'target',然后从** last **开始依次复制。您需要使用'>>'来代替'>'来追加数据。文件“%% I”是找到的文件名,但是复制将从* current *目录执行,该目录可能不是“源”。您应该使用'“%source %%%我”来包含源目录名称。我建议你编辑你的问题来澄清问题。你只是想用最后一个文件替换'target',还是将最后一个文件附加到它,还是第一个文件? – Magoo

回答

0

你的问题不清楚,所以让我尝试重组它:

我想你想找到一个.CZI扩展最近修改的文件,只有最新的文件复制到一些目标目的地。

要列出所有.CZI文件中所有子目录,通过最新文件第一排序:

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

如果输出的第一行是您要的文件,那么所有你需要做的就是复制那一个文件到你的目标。

(和请,花时间来编写详细和明确的问题,以便我们能够提供很好的答案)

0

假设刚刚过去的修改文件的时间从最新的文件从所有想*在.czi文件例如含目录C:\Temp

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

相关问题