我正在寻找一种方法来删除批处理文件中超过7天的所有文件。我在网上搜索了一下,找到了一些包含数百行代码的示例,还有一些示例需要安装额外的命令行实用程序来完成任务。
在BASH中,只需几行代码就可以完成类似的工作。在Windows中,似乎可以为批处理文件做一些简单的事情。我正在寻找一个解决方案,工作在标准的Windows命令提示符,没有任何额外的实用程序。请不要使用PowerShell或Cygwin。
我正在寻找一种方法来删除批处理文件中超过7天的所有文件。我在网上搜索了一下,找到了一些包含数百行代码的示例,还有一些示例需要安装额外的命令行实用程序来完成任务。
在BASH中,只需几行代码就可以完成类似的工作。在Windows中,似乎可以为批处理文件做一些简单的事情。我正在寻找一个解决方案,工作在标准的Windows命令提示符,没有任何额外的实用程序。请不要使用PowerShell或Cygwin。
当前回答
更灵活的方法是使用FileTimeFilterJS.bat:
@echo off
::::::::::::::::::::::
set "_DIR=C:\Users\npocmaka\Downloads"
set "_DAYS=-5"
::::::::::::::::::::::
for /f "tokens=* delims=" %%# in ('FileTimeFilterJS.bat "%_DIR%" -dd %_DAYS%') do (
echo deleting "%%~f#"
echo del /q /f "%%~f#"
)
该脚本将允许您使用诸如日、分、秒或小时等测量。 选择weather按创建、访问或修改时间筛选文件 列出某个日期之前或之后(或两个日期之间)的文件 选择是显示文件还是dirs(或两者都显示) 递归与否
其他回答
Windows Server 2008 R2操作系统
forfiles /P c:\sql_backups\ /S /M *.sql /D -90 /C "cmd /c del @PATH"
这将删除所有超过90天的.sql文件。
享受:
forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"
更多细节请参见forfiles文档。
要了解更多信息,请参考Windows XP命令行的A-Z索引。
如果您的计算机上没有安装forfiles,请将其从任何Windows Server 2003复制到您的Windows XP计算机的%WinDir%\system32\。这是可能的,因为EXE在Windows Server 2003和Windows XP之间完全兼容。
后续版本的Windows和Windows Server默认安装了它。
Windows 7及更新版本(包括Windows 10):
语法略有变化。因此更新后的命令为:
forfiles /p "C:\what\ever" /s /m *.* /D -<number of days> /C "cmd /c del @path"
forfiles /p "v:" /s /m *.* /d -3 /c "cmd /c del @path"
你应该做/d -3(3天前)这对我来说很好。所以所有复杂的批次都可以扔进垃圾桶。此外,forfile不支持UNC路径,因此可以通过网络连接到特定的驱动器。
你也许能搞定这件事。你可以看一下这个问题,一个更简单的例子。当你开始比较日期时,复杂性就来了。判断日期是否较大可能很容易,但如果需要实际获得两个日期之间的差异,则需要考虑许多情况。
换句话说,不要试图发明这个,除非你真的不能使用第三方工具。
天啊,已经有很多答案了。我发现的一个简单而方便的方法是使用&参数从单个Windows命令行指令连续执行两次ROBOCOPY.EXE。
ROBOCOPY.EXE SOURCE-DIR TARGET-DIR *.* /MOV /MINAGE:30 & ROBOCOPY.EXE SOURCE-DIR TARGET-DIR *.* /MOV /MINAGE:30 /PURGE
在这个例子中,它的工作原理是选择所有超过30天的文件(.)并将它们移动到目标文件夹。第二个命令再次执行相同的操作,添加了PURGE命令,这意味着删除目标文件夹中不存在于源文件夹中的文件。 因此,从本质上讲,第一个命令移动文件,第二个命令删除文件,因为当调用第二个命令时,它们不再存在于源文件夹中。
在测试时,请参考ROBOCOPY的文档并使用/L开关。