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>
: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”查看我编辑的答案(最后一段和代码示例),了解您应该使用的实际命令。好的,谢谢。我会让它在周末运行,我会看看它是否有效。最后一个小问题,我真的没有在我的第一篇文章中提供足够的信息吗?我认为这很好,但我熟悉批处理编程,能够发现问题。但我不能代表其他人说话。:-)好的,非常感谢。如果出现问题,我会告诉你的。