假设刚刚过去的修改文件的时间从最新的文件从所有想*在.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。
定义您的属性意味着什么,最好是将该信息附加到您的问题。 – Compo
还有什么是你想追加到目标文件的“数据”? * .czi文件或'最后修改'属性的内容? –
由于您正在执行'dir/o-d',因此您的命令应该先将最先修改的文件复制到'target',然后从** last **开始依次复制。您需要使用'>>'来代替'>'来追加数据。文件“%% I”是找到的文件名,但是复制将从* current *目录执行,该目录可能不是“源”。您应该使用'“%source %%%我”来包含源目录名称。我建议你编辑你的问题来澄清问题。你只是想用最后一个文件替换'target',还是将最后一个文件附加到它,还是第一个文件? – Magoo