【问题标题】:Write a Batch file for automatically delete the OLD IIS log file编写一个批处理文件以自动删除 OLD IIS 日志文件
【发布时间】:2014-04-11 20:18:04
【问题描述】:

每当我想删除共享 WebServer 上的旧 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"

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

非常感谢您的帮助。 谢谢你

【问题讨论】:

    标签: batch-file iis-7 command-prompt


    【解决方案1】:

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

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

    更容易。

    【讨论】:

    • 感谢您的评论。但是您的命令将不起作用,因为日志文件不在 hostsspaces 目录下,并且它们位于 HOSTINGSPACES 目录下的 2 级子目录中。感谢您的提示。所以你的意思是我需要使用 %%f 而不是 %f
    • 它仍然会将它们删除 2 个级别。只有当您在其他地方有类似的命名文件时,您才不会这样做。
    • 我正面临“进程无法访问该文件,因为它正被另一个进程使用”的问题我已经通过停止服务和 explorer.exe 的结束进程尝试了很多,请紧急帮助我在这方面的紧急情况下。我在运行许多网站的实时服务器中面临空间问题
    【解决方案2】:

    我强烈建议对任务使用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 替代方案,请参阅this other answer:有关如何正确减少 IIS LogFiles 文件夹的其他建议,check out this post 我在该主题上写的。

    【讨论】:

      【解决方案3】:

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

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

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

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

      u_ex*.log 是我的日志的语法,你的日志可能有其他语法,所以请注意这个。

      【讨论】: