批处理文件:如何删除按间隔选择的文件夹中的特定文件

时间:2015-07-31 04:21:37

标签: batch-file

我想知道怎么做,这就是我想要做的。

我的批处理文件将删除其所在文件夹的每个第n个文件。 我知道该文件应该如何运行,但我不知道要编写的代码行。

这个想法是:

  • 第一次询问区间变量
  • 第二次删除间隔内的每个文件
  • 3rd End

例如,在100个文件中排序。我进入间隔5。 应保留每第5个文件。因此,运行批处理文件后应该只剩下20个文件。其他文件应该删除。

这是我走了多远

@echo off
title ImageDeleter
echo Delete every _ files?
set /p interval=
FOR /D %%interval IN (folder_set) DO del filename
exit

2 个答案:

答案 0 :(得分:0)

1)首先,看起来你对批处理编程中的for循环知之甚少。 %%interval是一个很大的错误,没有人将指定的变量用作for循环的变量,您应该使用%%a%%b或其他代码。谷歌批量循环获取更多信息。

2)要按字母顺序对文件名进行排序,请使用dir /o:n,其中n表示您要排序的内容(名称)。

3)删除的文件不会转到回收站,这意味着您无法还原(否则您有文件恢复软件),因此请在想要删除它们之前再想一想。

4)在你提出有关stackoverflow的问题之前了解更多信息,并且不要留下任何代码让我们填写,我们基本上无法帮助你做到这一点。

如果路径中有任何更改,请在代码中更改它。如果您希望代码通过在执行期间输入路径来自动获取路径,请了解更多:)

@echo off
title ImageDeleter
setlocal enabledelayedexpansion

:main
cls
set /p interval=Interval=
set /a skip=5
set /a count_skip=0
set /a count=1
set /a number=1

cd c:\users\microsoft\desktop\del

for /f "tokens=5" %%a in ('dir /o:n c:\users\microsoft\desktop\del\') do (
    if !count_skip! equ !skip! (
        set /a count_skip-=1
        if %%a equ free (
            echo.
            echo Finished!
            pause >nul
            exit /b
        )
        if !count! neq !interval! (
            echo !number!. DELETED - %%a
            del %%a
        )
        if !count! equ !interval! (
            echo.
            echo !number!. REMAINED - %%a
            echo.
            set /a count=0
        )
        set /a count+=1
        set /a number+=1
    )
    set /a count_skip+=1
)

答案 1 :(得分:0)

在主题标题中,您说:“删除特定文件”。然后,你写道:“将删除每个第n个文件”(例如,如果N = 5删除文件5,10 15等),但后来你说:“我输入间隔5.每个第5个文件应该保留”(所以文件1,2,3,4 6,7,8,9 11,12,13,14等必须删除)。 ???

下面的第一个代码删除每个第n个文件,因此它将从100删除20个文件并保留80:

@echo off
setlocal EnableDelayedExpansion

title ImageDeleter
echo Delete every _ files?
set /p n=
set i=0
FOR %%a IN (file_set) DO (
   set /A i+=1, iMODn=i %% n
   if !iMODn! equ 0 del "%%a"
)

下一个代码保留每个第n个文件并删除其余文件,因此它将从100删除80个文件并保留20个:

@echo off
setlocal EnableDelayedExpansion

title ImageDeleter
echo Delete every _ files?
set /p n=
set i=0
FOR %%a IN (file_set) DO (
   set /A i+=1, iMODn=i %% n
   if !iMODn! neq 0 del "%%a"
)