MS DOS脚本只能DIR前10个文件,降序排列

时间:2012-08-13 08:34:02

标签: batch-file dos

我使用dir abc*.*/o:-d/b >> "testfile1.txt"以降序获取输出。有没有办法只获得5/10个文件作为输出。实际上我想在testfile1.txt中存储最新的5个(按修改日期排序)文件。

感谢您的回复

3 个答案:

答案 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"

以下是我为完成这项工作所做的工作:

  • 将你的dir语句传递给findstr以对每一行进行编号( dir abc *。* / o:-d / b | findstr / n。
  • 通过for循环来实现 单独的行#来自内容(使用“tokens = 1 * delims =:“
  • 使用if语句验证当前行#是否小于或等于“5”(如果%% 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