因此,我必须在Windows(.bat)中批量删除备份磁盘中的旧文件夹。
我已经创建了一个脚本来单独删除文件夹:
delete_single_folder.bat
@echo off
if %1.==. goto usage
if exist %1\nul goto deldir
echo Folder %1 does not exists.
goto end
::------------------------------------------------
:deldir
rd /s/q %1
echo Folder %1 deleted.
goto :end
::------------------------------------------------
:usage
echo usage:
echo %0 DIRNAME
echo.
echo Deletes the directory named DIRNAME and everything in it if it exists!
echo.
:end
正如您在::usage
中看到的,它是通过delete_single_folder FOLDER_TO_DELETE
执行的。大。
现在,我按日期降序排列所有文件夹:
dir /ad /b /O-D
使用for循环删除所选文件夹:
for /f %%i in ('dir /ad /b /O-D') do (
delete_single_folder %%i
)
效果很好,问题是删除所有文件夹,我想忽略N
条记录(天)。
dir
命令忽略最后N个文件夹,只将旧文件夹传递给for循环吗? dir /ad /b /O-D
的实际输出
20160211
20160210
20160209
20160208
20160207
20160206
20160205
20160204
20160203
20160202
20160201
20160131
但我想要的是:dir /ad /b /O-D
/ignore_first_5
预期输出
20160206
20160205
20160204
20160203
20160202
20160201
20160131
答案 0 :(得分:2)
我们可以通过在命令中使用 skip 选项来实现这一点。
语法:
for /f "tokens=* skip=4" %a in ('dir /ad /b /O-D') do echo %a
上面的命令会跳过输出中的前四个文件夹。
你可以根据你的要求调整命令
对您的代码进行的更改以使其正常工作:
for /f "tokens=* skip=5" %%i in ('dir /ad /b /O-D') do (
echo %%i
)
使用RD替换echo %% i以删除文件夹,一旦您认为它按预期工作