我正在寻找一种方法来删除批处理文件中超过7天的所有文件。我在网上搜索了一下,找到了一些包含数百行代码的示例,还有一些示例需要安装额外的命令行实用程序来完成任务。
在BASH中,只需几行代码就可以完成类似的工作。在Windows中,似乎可以为批处理文件做一些简单的事情。我正在寻找一个解决方案,工作在标准的Windows命令提示符,没有任何额外的实用程序。请不要使用PowerShell或Cygwin。
我正在寻找一种方法来删除批处理文件中超过7天的所有文件。我在网上搜索了一下,找到了一些包含数百行代码的示例,还有一些示例需要安装额外的命令行实用程序来完成任务。
在BASH中,只需几行代码就可以完成类似的工作。在Windows中,似乎可以为批处理文件做一些简单的事情。我正在寻找一个解决方案,工作在标准的Windows命令提示符,没有任何额外的实用程序。请不要使用PowerShell或Cygwin。
当前回答
执行如下命令:
ROBOCOPY C:\source C:\destination /mov /minage:7
del C:\destination /q
通过robocopy将所有文件(使用/mov移动文件,然后删除它们,而不是/ Move移动整个文件树,然后删除)移动到另一个位置,然后在该路径上执行删除命令,这样就可以了。
此外,如果你有一个目录中有很多数据,你可以使用/mir开关
其他回答
享受:
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。
有不同的版本。早期使用unix风格的参数。
我的版本(用于服务器2000 -注意交换机后面没有空格)-
forfiles -p"C:\what\ever" -s -m*.* -d<number of days> -c"cmd /c del @path"
要将forfiles添加到XP,请从ftp://ftp.microsoft.com/ResKit/y2kfix/x86/获取exe
并将其添加到C:\WINDOWS\system32
复制这段代码并保存为DelOldFiles.vbs。
使用CMD: cscript //nologo DelOldFiles。于六月15日
“15”表示删除超过15天的文件。
'copy from here
Function DeleteOlderFiles(whichfolder)
Dim fso, f, f1, fc, n, ThresholdDate
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(whichfolder)
Set fc = f.Files
Set objArgs = WScript.Arguments
n = 0
If objArgs.Count=0 Then
howmuchdaysinpast = 0
Else
howmuchdaysinpast = -objArgs(0)
End If
ThresholdDate = DateAdd("d", howmuchdaysinpast, Date)
For Each f1 in fc
If f1.DateLastModified<ThresholdDate Then
Wscript.StdOut.WriteLine f1
f1.Delete
n = n + 1
End If
Next
Wscript.StdOut.WriteLine "Deleted " & n & " file(s)."
End Function
If Not WScript.FullName = WScript.Path & "\cscript.exe" Then
WScript.Echo "USAGE ONLY IN COMMAND PROMPT: cscript DelOldFiles.vbs 15" & vbCrLf & "15 means to delete files older than 15 days in past."
WScript.Quit 0
End If
DeleteOlderFiles(".")
'to here
更灵活的方法是使用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(或两者都显示) 递归与否
你也许能搞定这件事。你可以看一下这个问题,一个更简单的例子。当你开始比较日期时,复杂性就来了。判断日期是否较大可能很容易,但如果需要实际获得两个日期之间的差异,则需要考虑许多情况。
换句话说,不要试图发明这个,除非你真的不能使用第三方工具。