我有一个包含我们日志文件的文件夹。我们有许多进程可以在其中创建日志文件的名称。示例如下。我想保留每个进程的最后10个日志文件(日志文件名)并删除任何其他文件。我看过一些与此相近的帖子(batch file remove all but the newest 10 files),但是除了最后10个文件外,它们都删除了。我需要最后10个不同的命名文件。
items x mu y
1 a -6 -3.0 NaN
2 b 8 6.5 6.5
3 a 0 -3.0 NaN
4 a -3 -3.0 NaN
5 b 5 6.5 6.5
我对此完全陌生,并提前感谢您的帮助。
答案 0 :(得分:0)
虽然您没有表现出任何自己的努力,但我决定提供一个满足您要求的脚本,因为我发现它具有挑战性;所以这是:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
rem // Define constants here:
set "_LOCATION=."
set "_PATTERN=*_??????????????"
set "_EXTENSION=.log"
set /A "_KEEP=2"
rem // Retrieve unique file name prefixes (with date/time stamp truncated):
if defined _EXTENSION (set "EXT=!_EXTENSION!") else set "EXT=."
for /F "delims= eol=|" %%F in ('dir /B /O:-N "!_LOCATION!\!_PATTERN!!EXT!"') do (
set "FILE=%%F" & set "NAME=_" & set "ITEM="
for %%N in ("!FILE:_=" "!") do (
set "NAME=!NAME!!ITEM!_" & set "ITEM=%%~N"
)
set "NAME=!NAME:~2!"
if defined NAME set "$UNIQUE[!NAME!]=#"
)
rem // Delete all but last number of files per unique file name prefix:
if %_KEEP% GTR 0 (set "SKIP=skip=%_KEEP%") else set "SKIP="
for /F "tokens=2 delims=[=] eol==" %%L in ('2^> nul set $UNIQUE[') do (
for /F "%SKIP% delims= eol=|" %%E in ('dir /B /O:-N "!_LOCATION!\%%L*!EXT!"') do (
ECHO erase "%%E"
)
)
endlocal
exit /B
在确认要删除正确的文件后,删除ECHO
命令行前面的大写erase
命令!
我假设日志文件的文件扩展名为.log
。该脚本可以处理文件名中包含任意数量下划线_
的文件。但是,如果任何文件名包含以下任何字符,它可能会失败:!
,^
,=
,[
和]
。< / p>