windows - 达到一定计数值后自动删除子文件夹中的文件
问题描述
谁能向我解释一下批处理脚本在 Windows 中是如何工作的?我有一个包含子文件夹的文件夹,其中包含图像。我需要一个脚本来自动删除这些子文件夹中 7 个及以上的图像,只是为了在每个子文件夹中最多保留 6 个图像,最好是按字母顺序排列的前 6 个。我找到了一些脚本,将它们保存为 .bat,但我不知道下一步该做什么。
1
@echo off
setlocal
set /a cnt=0
set "keep=6"
for /f "eol=: delims=" %%F in ('dir /b /o-d /a-d *.jpeg') do (
if defined keep (
2>nul set /a "cnt+=1, 1/(keep-cnt)" || set "keep="
) else del "%%F"
)
2
@echo off
for /f "tokens=1* delims=:" %%a in ('dir /b /o-d *.jpeg ^| findstr /N "^"') do (
if %%a gtr 6 del "%%b"
)
3
for /f "skip=7 eol=: delims=" %%F in ('dir /b /o-d /a-d *.jpeg') do @del "%%F"
4
@echo off
setlocal enableextensions disabledelayedexpansion
rem How many elements to keep
set "keep=6"
rem Retrieve folder from batch arguments
set "folder=%~1"
rem If no folder indicated, use current active directory
if not defined folder for %%a in (.) do set "folder=%%~fa"
rem Ensure we are working in the correct folder
pushd "%folder%" && (
rem For each element in the folder, skipping the first n
for /f "skip=%keep% delims=" %%a in (' dir /b /on ') do (
rem If it is a folder, use rmdir, else use del
if exist "%%a\" ( echo rmdir /s /q "%%a" ) else ( echo del "%%a" )
)
rem Work done. Return to previous active directory
popd
) || (
rem Folder change failed
echo Target folder does no exist
)
解决方案
我终于找到了一个按我需要的方式工作的脚本
for /f %%a in ('dir /b /ad') do (
for /f "skip=6" %%b in ('dir /b %%a /on') do (
del %%a\%%b
)
)
推荐阅读
- android - 无法将数据从 Volley 加载到 Fragment(选项卡布局)
- android - Xamarin.Android.D8.Target -“java.exe”在创建 proguard 配置文件时以代码 1 退出
- parceljs - 如何在使用 Parcel 构建之前擦除 dist/ 目录
- django - pg_restore:在 ubuntu 18.04 中使用 Pgadmin 4 在 PostgreSQL 中,[archiver] 输入文件似乎不是有效的存档错误
- angular - 我没有得到适当的回应。我得到[对象对象]
- jquery - 无法使用 Jquery 读取数据属性
- javascript - 如何通过不使用 new 关键字来运行带类的 NodeJS 项目
- java - 在java中分隔一个字符串
- beautifulsoup - 使用 Python 进行网页抓取:BeautifulSoup 的问题
- php - 员工月休假报告