如何删除含相似部分名称的文件?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
相关产品推荐
相关产品推荐

