Batch file 用于删除超过5天的文件的批处理脚本

Batch file 用于删除超过5天的文件的批处理脚本,batch-file,scheduled-tasks,Batch File,Scheduled Tasks,我有一个批处理脚本,我每天晚上午夜通过任务调度器运行它。以下是脚本: forfiles /M *.bak /p "Z:\Logs" /S /D -5 /C "cmd /c del @file : date >= 5 days >NUL" 但当任务在午夜运行时,它不会删除超过5天的文件。如果我双击批处理文件并手动运行它,它会删除超过5天的文件。出了什么问题,或者我需要做一些不同的事情才能让这一切顺利进行 编辑: 以下是我的完整批处理文件和有关任务计划的更多信息: sqlcmd -S

我有一个批处理脚本,我每天晚上午夜通过任务调度器运行它。以下是脚本:

forfiles /M *.bak /p "Z:\Logs" /S /D -5 /C "cmd /c del @file : date >= 5 days >NUL"
但当任务在午夜运行时,它不会删除超过5天的文件。如果我双击批处理文件并手动运行它,它会删除超过5天的文件。出了什么问题,或者我需要做一些不同的事情才能让这一切顺利进行

编辑:

以下是我的完整批处理文件和有关任务计划的更多信息:

sqlcmd -S server\SQLEXPRESS -U user -P password -i "D:\BackupPrograms\translogsbackup.sql"
forfiles /M *.trn /p "Z:\Logs" /S /D -5 /C "cmd /c del @file >NUL"

我正在使用管理员帐户执行每天晚上运行的任务计划。我试图让它删除sqlcmd正在创建的旧备份,这样我就可以确保我不会在不需要的完整SQL备份上浪费大量空间。我希望这能帮助更多人。我只是不明白为什么批处理文件在任务调度器中运行时和双击它运行时会有不同的行为

与调度程序相比,它在命令提示符下不起作用,原因如下

/C "cmd /c del @file : date >= 5 days>NUL"
在命令行中的该位置是非法的,它将被忽略

=
被解释为输出重定向符号,因此所有输出都被重定向到当前目录中名为
5
的文件

C:\>md Test
C:\>cd Test
您可以自己在命令提示符下进行测试:

  • 从命令提示符在系统上创建一个新的空文件夹,例如
    C:\Test
    ,并将其设置为active directory

    C:\>md Test
    C:\>cd Test
    
  • 在文件夹中创建两个虚拟文件:

    C:\Test>echo file1 > file1.txt
    C:\Test>
    C:\Test>echo file2 > file2.txt
    
  • 执行一个目录以查看其中的内容:

    C:\Test>dir /b
    
    file1.txt
    file2.txt
    
    C:\Test>
    
    C:\Test>dir /b
    
    5
    file1.txt
    file2.txt
    
    C:\Test>
    
  • 尝试此
    forfiles
    命令以查看输出:

    C:\Test>forfiles /M *.txt /C "cmd /c echo @file"
    
    "file1.txt"
    "file2.txt"
    
    C:\Test>
    
  • 更改文件的
    forfiles
    以添加
    :date>=5天
    ,然后再次运行:

    C:\Test>forfiles /M *.txt /C "cmd /c echo @file : date >= 5 days"
    
    C:\Test>
    
  • 执行一个目录以查看其中的内容:

    C:\Test>dir /b
    
    file1.txt
    file2.txt
    
    C:\Test>
    
    C:\Test>dir /b
    
    5
    file1.txt
    file2.txt
    
    C:\Test>
    
  • 请注意名为5的新文件

    因此,解决方案是:删除
    :date>=5天
    。您可以保留
    NUL
    部分,因为这样可以合法地将任何输出重定向到NUL(nothing),使其不显示。因此,您的命令如下所示:

    forfiles /M *.bak /p "Z:\Logs" /S /D -5 /C "cmd /c del @file >NUL"
    

    . (关于您的问题没有足够的细节。)我说过,当脚本通过任务计划程序运行时,它不会删除超过5天的文件。但是当我手动运行它时,它会删除超过5天的文件。这怎么还不够信息呢?我不确定我还能提供什么其他信息?好的,现在说得通了。谢谢你的例子。这就是我现在拥有的:forfiles/M*.bak/p“Z:\Logs”/S/D-5/C“cmd/C del@file NUL”查看我编辑的答案(最后一段和代码示例),了解您应该使用的实际命令。好的,谢谢。我会让它在周末运行,我会看看它是否有效。最后一个小问题,我真的没有在我的第一篇文章中提供足够的信息吗?我认为这很好,但我熟悉批处理编程,能够发现问题。但我不能代表其他人说话。:-)好的,非常感谢。如果出现问题,我会告诉你的。