【问题标题】:Batch file that deletes all but the last 10 per file name删除每个文件名最后 10 个以外的所有文件的批处理文件
【发布时间】:2017-03-22 14:23:29
【问题描述】:

我有多个文件夹,其中包含多个具有相同名称和时间戳的文件。示例:

foo_2017.01.16.png
foo_2017.01.15.png
foo_2017.01.14.png
bar_2017.01.16.png
bar_2017.01.15.png
bar_2017.01.14.png
file_2017.01.16.png
file_2017.01.15.png
file_2017.01.14.png

我需要做的是创建一个批处理文件,该文件将仅解析 _timestamp 之前的名称并保留每个文件名的最后 10 个。我不是很精通批处理,真的可以在这里使用一些帮助。每个文件的修改日期都是一样的,所以我不能说只保留最后 10 天,否则我可以处理。

编辑:

我有一个批处理文件,它删除特定文件夹中超过 28 天的文件,如下所示,我只是不知道如何修改它以专门针对每个文件名进行迭代,而不是按修改日期:

/c echo @FILE
forfiles -p "C:\workspace\SeleniumTestResults" -s -m *.* /D -28 /C "cmd /c del @path"

再说一遍,这批绝对不是我的地盘

【问题讨论】:

  • Help 意味着您已经自己完成了一些事情,因此请通过相应地编辑您的问题来发布您的批处理文件,并就给您带来问题的代码部分寻求具体帮助。
  • 我附上了一个批处理文件的副本,我用它来删除基于日期修改的所有文件,我只是不知道该怎么做我的问题详细信息
  • 不要扩展或更改问题的范围,因为已经发布的答案可能会显得不完整或错误!而是发布另一个问题!此外,永远不要在问题中包含解决方案;请提供您自己的答案!谢谢!

标签: windows batch-file


【解决方案1】:
@echo off
setlocal
REM create some files for testing:
break>foo_2017.01.16.png
break>foo_2017.01.15.png
break>foo_2017.01.14.png
break>bar_2017.01.16.png
break>bar_2017.01.15.png
break>bar_2017.01.14.png
break>file_2017.01.16.png
break>file_2017.01.15.png
break>file_2017.01.14.png
dir *.png

set keep=2

for /f "delims=_" %%a in ('dir /b *.png') do (
  for /f "skip=%keep% delims=" %%b in ('dir /b /o-n "%%~a*.png"') do del "%%b"
)
dir *.png

【讨论】:

  • 是否可以在与“屏幕截图”匹配的每个子目录中运行答案中的“for”循环?这很好用,我想我可以弄清楚如何扫描所有子文件夹并执行您在所有“屏幕截图”目录上提供的“for”循环,但我没有运气弄清楚这一点。我用示例文件夹结构编辑了我的问题。任何进一步的帮助将不胜感激。 ---我已经补充了我的问题。另外,我应该为此创建一个新问题吗?
  • 我想通了。我会把解决方案放在问题中
  • 不@DustinN.,不要在你的问题中提出解决方案!而是发布您自己的答案!
猜你喜欢
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多