首页 > 解决方案 > 达到一定计数值后自动删除子文件夹中的文件

问题描述

谁能向我解释一下批处理脚本在 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 
)

标签: windowsbatch-file

解决方案


我终于找到了一个按我需要的方式工作的脚本

for /f %%a in ('dir /b /ad') do (
 for /f "skip=6" %%b in ('dir /b %%a /on') do (
  del %%a\%%b
 )
)

推荐阅读