Batch file 为自动删除旧IIS日志文件编写批处理文件

Batch file 为自动删除旧IIS日志文件编写批处理文件,batch-file,iis-7,command-prompt,Batch File,Iis 7,Command Prompt,每当我想删除共享Web服务器上的旧IIS日志文件时,我都会在CMD上运行以下命令: for /R C:\HostingSpaces %f in (u_ex*.log) do del /q "%~ff" 它搜索IIS日志文件并将删除所有这些文件。当然,它不能删除当天的日志文件,因为它们已经在IIS中打开,无法删除。 它显示了在命令提示符控制台中逐个删除日志文件的进度 我需要设置一个计划任务来运行一个BAT文件,以便每天自动执行此任务。 我制作了一个bat文件,并在其中粘贴了以下命令: 对于/R

每当我想删除共享Web服务器上的旧IIS日志文件时,我都会在CMD上运行以下命令:

for /R C:\HostingSpaces %f in (u_ex*.log) do del /q "%~ff"
它搜索IIS日志文件并将删除所有这些文件。当然,它不能删除当天的日志文件,因为它们已经在IIS中打开,无法删除。 它显示了在命令提示符控制台中逐个删除日志文件的进度

我需要设置一个计划任务来运行一个BAT文件,以便每天自动执行此任务。 我制作了一个bat文件,并在其中粘贴了以下命令: 对于/R C:\hostingspace%f,在(u_ex*.log)do del/q“%~ff”中

但是当我运行批处理文件时,什么都没有发生,也看不到任何结果和操作。 如何编写批处理文件以运行此命令

非常感谢你的帮助。
谢谢

您需要在批处理文件中为for循环使用%%A,而不是在命令提示下使用%A

del C:\HostingSpaces\u_ex*.log /s

更简单。

出现错误的原因是当前日志是在IIS中打开的

IIS保持当前日志的打开状态,并不断在其上写入。因此,您将无法删除当天的日志

这是对我有效的命令。我的网站都放在名为
hostingspace
的文件夹中,我这样做是为了删除所有日志文件(只有当天的日志会保留在末尾)


u_ex*.log
是我的日志的语法,您的日志可能有其他语法,因此请注意这一点。

我强烈建议使用
forfiles
命令执行任务:

forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"
开关说明:

  • -s或/s:递归到所有子文件夹
  • -p或p:路径
  • -m或/m:文件掩码
  • -d或/d:天数(-180=早于180天)
  • -c或/c:要执行的命令
然后,您可以将其放入计划任务中,并让其每天运行


有关一个像样的Powershell替代方案,请参阅:有关如何正确减少IIS LogFiles文件夹的其他建议,这是我在该主题上写的。

感谢您的评论。但是您的命令将不起作用,因为日志文件不在hostingspace目录下,并且它们位于hostingspace目录下2级的子目录中。谢谢你的提示。所以你的意思是我需要使用%%f而不是%fIt,但仍会将其删除2级。只有当您在其他地方有类似的命名文件时,您才会这样做。我面临的问题是“进程无法访问文件,因为它正被另一个进程使用”。我已通过停止服务以及explorer.exe的结束进程尝试了很多,请在这方面紧急帮助我。我在我的实时服务器上面临空间问题,很多网站都在运行
forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"