【发布时间】:2019-02-14 00:43:54
【问题描述】:
我有一些文件要整理并保留最新的文件。 我不能通过修改或创建的文件属性日期来做到这一点,我可以做到这一点。
这是文件的命名约定。 文件ABC_YYYYMMDD.txt
- FileABC_20190201.txt
- FileABC_20190125.txt
- FileABC_20190118.txt
- FileABC_20190111.txt
- FileABC_20190104.txt
您可以看到日期戳在文件名本身中。这些文件每周生成一次。所以我想有一个批处理文件循环遍历它们并删除除最新日期文件之外的所有文件。我真的在寻找如何做到最好,但我没有找到太多,所以我需要一些想法。我更喜欢纯 cmd 解决方案,但我也对 powershell 解决方案持开放态度。
我自己尝试的是用...解析出日期
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims= " %%G IN ('dir/b /a-d "C:\Users\thomas.maus\Documents\Tom\dev\Test Batch Files\dev\sortbyFileDateName\FileABC_*.txt"') do (
set fileName=%%G
Set theDate=!fileName:~8,8!
echo !theDate!
)
然后我想以某种方式从循环的结果中获取这些日期并执行类似的操作
if "%theDate%" GEQ "*****not sure what to put here*****" (
del *all the old files, also not sure what to put here*
)
【问题讨论】:
-
您提供的文件已经按日期顺序排列,最新的在前,并且给定您分配给它们的名称按字母顺序排序,这意味着最新的文件将始终排在最前面或最后,具体取决于排序顺序。
-
我并不是真的要订购或分类它们。我只想删除除最新文件之外的所有文件。我解析了日期,这样我就可以尝试做一些数学运算来获得最大的日期,然后使用某种逻辑来删除比最新日期更旧的任何内容。
-
您不能对文本字符串进行数学运算,您可以做的是在公共分隔符处拆分名称,对日期部分的文件进行排序,然后以排序或反向排序的顺序删除它们,除了一个!
-
这里有很多现有的帖子应该可以让你开始。试试这些,例如:stackoverflow.com/q/54657806/62576 和 stackoverflow.com/q/44057048/62576
-
FileABC部分是否可以单独包含字符_?
标签: windows powershell batch-file cmd