我使用dir abc*.*/o:-d/b >> "testfile1.txt"
以降序获取输出。有没有办法只获得5/10个文件作为输出。实际上我想在testfile1.txt中存储最新的5个(按修改日期排序)文件。
感谢您的回复
答案 0 :(得分:7)
@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语句,但这需要延迟扩展,延迟扩展会破坏包含!
的文件名。具有延迟扩展的适当解决方案必须在循环内打开和关闭延迟扩展。
答案 1 :(得分:3)
我知道我在这个问题上有点晚了,但是这个怎么样呢:
@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。',因为还没有空行观看出去(见下面的评论)。
答案 2 :(得分:0)
此是否是批处理文件?这在PowerShell中是微不足道的。
要使用普通的旧批处理文件来执行此操作,您需要类似于head实用程序的内容,以便仅获取前几行输出。
您可以在此处调整解决方案以满足您的需求(请注意关于小“winhead.cmd”脚本的答案部分): Batch command to take only first line from input