批处理脚本在某个计数值后删除目录中的文件

时间:2015-02-11 09:28:16

标签: windows batch-file dos

我目前正在寻找实现一个小脚本来浏览目录并删除所有文件/文件夹后,在这种情况下使用3

这是我试图实现的一个例子

c:/ test包含

  1. file1.bak
  2. file2.bak
  3. file3.bak
  4. file4.bak(删除)
  5. file5.bak(删除)
  6. file6.bak(删除)
  7. 我对批处理脚本不是很熟悉,但相信这个过程需要 a for iteration,为目录中的每个文件(任何类型)的count变量加1,当计数达到3时,它将开始删除该点之后的文件。有人可以请求帮助我可以用Java编写基本进程,但对批处理脚本略有不熟悉。有人可以帮忙吗?

    由于

3 个答案:

答案 0 :(得分:1)

不需要计数器

@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 
    )

文件/文件夹删除操作仅回显给控制台。如果输出正确,请删除echormdir

之前的del命令

答案 1 :(得分:0)

未测试。更改文件开头的目录,数字等变量。确定删除最后一行的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!
 )
)

答案 2 :(得分:0)

因此,如果要求“按字母顺序排序,请保留文件夹中*.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提供。您可以使用它来摆脱硬编码值。