繁体   English   中英

批处理脚本以删除特定计数值后目录中的文件

[英]Batch Script To Delete Files Within a Directory After A Certain Count Value

我目前正在寻求实现一个小的脚本,以浏览目录并在达到一定计数值后删除所有文件/文件夹,在这种情况下,请使用3

这是我正在努力实现的一个例子

c:/ test包含

  1. file1.bak
  2. file2.bak
  3. file3.bak
  4. file4.bak(删除)
  5. file5.bak(删除)
  6. file6.bak(删除)

我对批处理脚本不是很熟悉,但是相信该过程将需要for迭代,该迭代将目录中每个文件(任何类型)的计数变量加1,并且当计数达到3时,它将在该点之后开始删除文件。 有人可以帮忙吗,我可以用Java编写基本流程,但对批处理脚本有点不熟悉。 有人可以帮忙吗?

谢谢

无需柜台

@echo off
    setlocal enableextensions disabledelayedexpansion

    rem How many elements to keep
    set "keep=3"

    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 
    )

文件/文件夹删除操作仅回显到控制台。 如果输出正确,请除去rmdirdel之前的echo命令

不tested.Change目录,数量和等变量在file.And之初其确定删除echo最后一行

@echo off
set "start_deleting_from=4"
set "directory=c:\bak_files"
set "extension=.bak"
set counter=0

pushd "%directory%"
setlocal enableDelayedExpansion
for %%# in (%extension%) do (
  set /a counter=counter+1
  if !counter! GEQ !start_deleting_from! (
   rem delete "echo" if to activate deletion
   echo del /q /f file!counter!!extension!
 )
)

因此,如果要求是“按字母顺序排序,请将*.bak文件的前三个保留在该文件夹中,然后删除其余三个” ,则批处理文件将为:

@echo off
setlocal EnableDelayedExpansion

pushd C:\test
set top=3
set filespec=*.bak
set counter=0

for /f "delims=" %%f in ('dir /b %filespec%') do (
    set /a counter+=1
    if !counter! GTR %top% del /q "%%f"
)

您可以使用dir命令的各种选项来实现不同的顺序或选择不同的文件。


您还可以使用命令行参数来配置脚本。 假设您这样调用脚本:

delete_after.bat 3 *.bak

那么批处理文件中的3*.bak分别作为%1%2可用。 您可以使用它来摆脱硬编码的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM