编写批处理文件以自动删除OLD IIS日志文件

时间:2014-04-11 20:18:05

标签: 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文件并在其中粘贴了这个命令: for / R C:\ HostingSpaces%f in(u_ex * .log)do del / q"%~ff"

但是当我运行批处理文件时没有任何反应,我也看不到任何结果和行动。 如何编写批处理文件来运行此命令?

非常感谢你的帮助。 谢谢

3 个答案:

答案 0 :(得分:1)

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

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

更容易。

答案 1 :(得分:0)

您收到错误的原因是因为当天的日志在IIS中打开。

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

这是对我有用的命令。我的网站都放在名为HOSTINGSPACES的文件夹中,我这样做是为了删除所有日志文件(只有当前日志会保留在最后)

# for /R C:\HostingSpaces %f in (u_ex*.log) do del /q "%~ff"

u_ex*.log是我的日志的语法,您的日志可能有另一种语法,所以请注意这一点。

答案 2 :(得分:0)

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

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

开关说明:

  • -s或/ S:递归到所有子文件夹
  • -p或/ P:path
  • -m或/ M:文件掩码
  • -d或/ D:天数(-180 =超过180天)
  • -c或/ C:执行命令

然后,您可以将其放入计划任务并让它每天运行。

对于体面的 Powershell 替代方案,请参阅this other answer:有关如何正确减少IIS LogFiles文件夹的其他建议,我在该主题上撰写的check out this post