批处理文件/脚本删除目录中的每3个文件

时间:2010-10-19 15:02:57

标签: batch-file

我有一个带有顺序命名图像的文件夹(a0001,a0002,a0003等),我想知道是否有办法删除每3个文件而不触及其他文件。

例如,我有:a0001,a0002,a0003,a0004,a0005 a0006,a0007,a0008,a0009

之后我想拥有:a0001,a0005,a0009

3 个答案:

答案 0 :(得分:0)

我不确定语法,因为我通常不编写批处理脚本,但应该是这样的:

set z = 0
for /f %%a IN (‘dir /b *’) do {
  set z = z + 1;
  if (z % 3 == 0) del %%a
}

答案 1 :(得分:0)

这是你可以使用的vbscript

strFolder = WScript.Arguments(0)
Set objFS = CreateObject( "Scripting.FileSystemObject" )
Set objFolder = objFS.GetFolder(strFolder)
i=0
For Each strFile In objFolder.Files
    If i Mod 4 <> 0 Then
        WScript.Echo strFile.Name
        objFS.DeleteFile(strFile.Name)
    End If
    i=i+1
Next

用法:

C:\test> cscript //nologo test.vbs c:\folder_to_process

答案 2 :(得分:0)

这是一个解决方案。这允许您指定要删除的内容(例如c:\temp\*.tmp)要跳过的文件数(默认为您请求的3)以及使用的顺序(默认为n - 文件名)。您可以使用任何DIR排序,例如N(姓名)或ES(扩展名然后尺寸),请参阅dir /?以了解有关订购的详情。你不应该用/o启动命令命令(与dir不同) - 它是自动添加的。

来源: ndel.bat

@echo off
::: ndel - Deletes every nth file matching the spec
::: syntax: ndel.bat FILESPEC [skipcount] [sortorder]
:::           FILESPEC  - Files to be searched through
:::           skipcount - number of files to skip (optional - default 3)
:::           sortorder - File order (see: DIR for options - default N (name))

:: With no arguments show the above usage text
if "%~1"=="" findstr "^:::" "%~f0"&GOTO:EOF
set find=%1
set evry=4
set ord=n
if "%~2" neq "" set /a evry=(%2+1)
if "%~3" neq "" set ord=%3

set count=0
for /f %%f IN ('dir %find% /b /o%%ord%%') do (
    call :test_file "%%f"
)
GOTO:eof

:test_file
set /a _r="%count% %% %evry%"
if %_r%==0 echo %1
::-to delete- if %_r%==0 del %1
set /a count+=1
GOTO:eof

备注:

  • 您需要发表评论if %_r%==0 echo %1并删除开始评论::-to delete-以实际执行删除操作(一旦您感到高兴,就可以了:)。
  • 如果输入ndel(没有参数)
  • ,前几行只输出用法
  • 跳过三与删除每四个文件相同,这就是evry跳过+ 1的原因,默认设置为4(跳过3)。
  • filespec可以包含文件夹和复杂的外卡匹配(就像dir)。
  • 子例程必须通过count正确地用于forFOR循环中的环境变量在循环开始时展开,并且直到 结束DO部分后)
  • 致电ndel c:\temp\*.tmp 0del c:\temp\*.tmp相同(因为跳过0 =全部)