gpt4 book ai didi

windows - 批量循环按日期排序的文件夹名称忽略较新的 N 元素

转载 作者:可可西里 更新时间:2023-11-01 10:18:29 25 4
gpt4 key购买 nike

因此,我必须在 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

最佳答案

我们可以通过在命令中使用 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
)

echo %%i 替换为 RD 以删除文件夹,一旦您觉得它按预期工作

关于windows - 批量循环按日期排序的文件夹名称忽略较新的 N 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35339211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com