You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除含相似部分名称的文件?Windows批处理保留每秒一个文件

实现每秒保留一个带纳秒时间戳文件的Windows批处理脚本

当然可以!我帮你写一个Windows批处理脚本,能实现每秒只保留一个文件的需求。不过首先得确认你的文件名格式——假设你的文件名里包含明确的时分秒+纳秒信息,比如类似log_111429_000000033.txt(对应11时14分29秒33纳秒),下面的脚本会基于这个格式来处理,你可以根据实际文件名调整提取逻辑:

脚本代码

@echo off
setlocal enabledelayedexpansion

:: 设置目标文件的匹配规则,比如所有txt文件,你可以改成自己的格式
set "file_pattern=*.txt"
:: 设置临时文件路径,用来记录已经保留过的秒级时间戳
set "temp_file=%temp%\retained_seconds.tmp"

:: 初始化临时文件,如果存在则清空
if exist "%temp_file%" del "%temp_file%"

:: 遍历所有目标文件
for %%f in (%file_pattern%) do (
    :: 提取文件名中的秒级时间戳部分——这里假设文件名格式是前缀_HHMMSS_纳秒.后缀
    :: 比如log_111429_000000033.txt,%%~nf是log_111429_000000033,用下划线分割取第2段
    for /f "tokens=2 delims=_" %%s in ("%%~nf") do (
        set "current_second=%%s"
        :: 检查当前秒级时间戳是否已经在临时文件中
        findstr /x /c:"!current_second!" "%temp_file%" >nul
        if errorlevel 1 (
            :: 如果不存在,保留这个文件,并将秒级时间戳写入临时文件
            echo 保留文件: %%f
            echo !current_second! >> "%temp_file%"
        ) else (
            :: 如果已经存在,删除这个文件
            echo 删除文件: %%f
            del "%%f"
        )
    )
)

:: 清理临时文件
del "%temp_file%"

echo 处理完成!
endlocal
pause

关键调整说明

你需要根据自己的实际文件名格式修改时间戳提取逻辑:

  • 如果你的文件名是111429000000033.log(直接是HHMMSS+纳秒),可以把提取部分改成:
    set "current_second=%%~nf"
    set "current_second=!current_second:~0,6!"
    
  • 如果文件名是20240520111429000000033.dat(日期+时分秒+纳秒),就取第9到14位的时分秒:
    set "current_second=%%~nf"
    set "current_second=!current_second:~8,6!"
    
  • 核心是提取出到秒为止的唯一标识,比如111429对应11时14分29秒,这样同一秒的文件会被归为一组。

注意事项

  • 强烈建议先在测试文件夹中运行脚本,确认逻辑正确后再处理真实文件!
  • 如果需要保留每组中最新/最早的文件,而不是第一个遇到的,可以先对文件按时间排序再遍历。比如用dir /o:-d %file_pattern%按时间降序(保留最新),遍历代码改成:
    for /f "delims=" %%f in ('dir /b /o:-d %file_pattern%') do (
        :: 后续逻辑不变
    )
    

内容的提问来源于stack exchange,提问作者Hayley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:07:22