我dir abc*.*/o:-d/b >> "testfile1.txt"
用来按降序获取输出。有没有办法只获得 5 / 10 个文件作为输出。实际上我想将最新的 5 个(按修改日期排序)文件存储在 testfile1.txt 中。
感谢您的回复
我dir abc*.*/o:-d/b >> "testfile1.txt"
用来按降序获取输出。有没有办法只获得 5 / 10 个文件作为输出。实际上我想将最新的 5 个(按修改日期排序)文件存储在 testfile1.txt 中。
感谢您的回复
@echo off
setlocal
set /a "n=0, limit=5"
>"testfile1.txt" (
for /f "eol=: delims=" %%F in ('dir /o-d /b abc*.*') do (
echo %%F
2>nul set /a "n+=1, 1/(limit-n)"||goto :break
)
)
:break
我故意除以 0 以检测何时达到限制。我可以简单地使用 IF 语句,但这需要延迟扩展,并且延迟扩展会损坏包含!
. 具有延迟扩展的适当解决方案必须在循环内打开和关闭延迟扩展。
我知道我在这个方面有点晚了,但是这个怎么样:
@echo off
for /f "tokens=1* delims=:" %%a in ('dir abc*.*/o:-d/b ^| findstr /n .') do if %%a leq 5 echo.%%b>>"testfile1.txt"
这是我为完成这项工作所做的工作:
编辑:将 ' findstr /n .* ' 更改为 ' findstr /n 。',因为没有空行需要注意(请参阅下面的评论)。
这必须是批处理文件吗?这在 PowerShell 中是微不足道的。
要使用普通的旧批处理文件执行此操作,您将需要类似于 head 实用程序的东西,以仅获取前几行输出。
您可以在此处调整解决方案以满足您的需求(请注意答案中有关“winhead.cmd”小脚本的部分): 批处理命令仅从输入中获取第一行