我计划在 Windows Server 2012 上运行此备份 cmd 的任务。它以前在没有 forfiles 的情况下工作,forfiles 应该只保留 6 天的条目的文件夹/文件。
SET date_stamp=%DATE:~10,4%-%DATE:~7,2%-%DATE:~4,2%
forfiles /p E:\Test_Backups\ /D -6 /C "cmd /c del /s /q @PATH"
for /f "usebackq" %d in (`dir /ad/b/s "E:\Test_Backups\"`) do rd "%d"
forfiles /p E:\Test2_Backups\ /D -6 /C "cmd /c del /s /q @PATH"
for /f "usebackq" %d in (`dir /ad/b/s "E:\Test2_Backups\"`) do rd "%d"
mkdir "E:\Test_Backups\%date_stamp%"
mkdir "E:\Test2_Backups\%date_stamp%"
::stop some services
"C:\Program Files\7-Zip\7z.exe" a -m0=COPY "E:\Test_Backups\%date_stamp%\%date_stamp%-TestApp.7z" "D:\Test"
::start some services
现在,它停止工作了。任务调度程序的历史记录显示它已运行,但“E:\Test_Backups\”中没有任何备份。甚至 mkdir 也没有运行。
我可以知道发生什么事了吗?
答案1
我刚刚发现在运行其他代码之前必须关闭这个 for 循环
for /f "usebackq" %d in (`dir /ad/b/s "E:\Test2_Backups\"`) do rd "%d"
网上有一些方法可以找到另一段代码,这被认为是 cmd 中的一种解决方法,但对我来说,最简单的方法是将代码拆分为 2 个计划任务。