我有很多存储备份文件的存档文件夹。 每个文件夹每天增加。
我需要删除除最近N个副本以外的所有文件,N由父循环中的一个variables定义。
%% a是父循环中的一个数字,然后使用另一个for循环来删除
for /F "usebackq skip=%%a" %%x in (`dir /TW /O:-D /B %%b`) do del %%x
错误报告
%a“在这个时候是意外的。
如何解决这个问题?
由于skip不能使用variables,因此需要以某种方式解决该限制。
一些替代品:
dir命令来生成条目列表,实现另一个只输出要删除的条目的脚本(然后,您可以在一个位置设置N ) dir的输出pipe道输出到一个实用程序,该实用程序从列表的开始处过滤出N行(我不知道这样做,但有些GNU实用程序(其中存在Windows端口)可能会这样做)。 你可以在for循环的参数部分使用一个variables,而不是从循环的另一个variables。 下面是一个有点人为的例子,它列出了%TEMP%目录的内容10次,每次循环跳过一行。 这应该是你想要做的一个代表性的例子:
@echo off for /l %%a in (1,1,10) do call :innerloop %%a > %%a.txt goto :EOF :innerloop for /f "usebackq skip=%1" %%i in (`dir /s /a /b "%TEMP%"`) do echo %%i
这将是一个很好的写在PowerShell中的脚本。
$n = 5 $FoldersList = Dir e:\Archive foreach($Folder in $FoldersList) { Dir $Folder | Sort-Object CreationTime -Descending | Select-Object -Skip $n | Remove-Item -whatif }
在这种情况下,Powershell使得维护脚本变得非常简单和容易。
在你的档案上运行之前testing它,因为我没有在我的最后testing它。 删除 – 什么时候你准备好了。