【问题标题】:How to delete files with specific names in windows 10 using batch file?如何使用批处理文件在 Windows 10 中删除具有特定名称的文件?
【发布时间】:2020-10-23 09:47:06
【问题描述】:

你能帮我用一个批处理文件的命令来删除带有文件名的文件吗?

我需要根据文件名删除超过 6 个月的文件。我需要在任务计划程序中安排脚本,因此它会根据文件名每天删除当前日期超过 6 个月的特定位置的文件。

文件位置:

K:\Bck

文件名:

Backup_2020-10-22.txt
Backup_2020-10-21.txt
Backup_2019-09-16.txt
Backup_2018-05-17.txt
Backup_2017-04-16.txt

【问题讨论】:

标签: windows batch-file del


【解决方案1】:

这里是 Aacini's 帖子的修改版本,早在 2013 年。我只是将其修改为使用 powershell 来获取今天的日期,而不是使用特定于语言环境的 %date% 变量和一些更改以适应您的环境.所以我对此一点也不相信。

@echo off
setlocal EnableDelayedExpansion
pushd "K:\Bck"
for /f "tokens=*" %%i in ('PowerShell -Command "& {Get-Date -format 'yyyyMMdd'}"') do set todayDate=%%i
call :DateToJDN %todayDate% todayJDN=

for /F "tokens=1-4* delims=_-" %%a in ('dir /B /A-D "Backup_*-*-*.txt"') do (
   call :DateToJDN %%b%%c%%~nd fileJDN=
   set /A daysOld=todayJDN - fileJDN
   if !daysOld! gtr 180 (
      echo File "%%a_%%b-%%c-%%d" is !daysOld! days old
      del "%%a_%%b-%%c-%%d" /Q
   )
)
popd
goto :eof

:DateToJDN yyyymmdd jdn=
set yyyymmdd=%1
set /A yyyy=%yyyymmdd:~0,4%, mm=1%yyyymmdd:~4,2% %% 100, dd=1%yyyymmdd:~6% %% 100
set /A a=(mm-14)/12, %2=(1461*(yyyy+4800+a))/4+(367*(mm-2-12*a))/12-(3*((yyyy+4900+a)/100))/4+dd-32075
exit /B

这还不会删除任何内容。它只会将命令回显到屏幕上。如果您确定echo 的结果与您想要的相似,您可以从echo del "%%a_%%b_%%c_%%d" /Q 行中删除echo

您还需要在 if !daysOld! gtr 180 ( 行中相应地设置您的日期

【讨论】:

  • 感谢您的回复,我得到的结果如下,我从 del 命令行中删除了 echo,但该文件没有被删除。你有什么建议吗。日志:文件“Backup_2019-10-21.txt__”已有 708 天的历史
  • 我没有收到任何错误消息,但它没有删除超过 180 天的文件。另外,我在文件名末尾添加了分隔符下划线“txt__”,为什么我会这样。 “Backup_2019-10-21.txt__”?
  • 是的,对不起,我已经检查了格式并立即更新。以前是错的。我将测试您的最新更新并回复您。谢谢你的帮助。非常感谢。
  • 非常感谢 Gerhard,脚本正在运行。感谢您的帮助。
  • 记得在文件布局发生变化时相应地更改脚本。这些脚本特定于您的格式。
猜你喜欢
  • 2013-03-12
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
相关资源
最近更新 更多