我正在寻找一种按特定顺序删除文件的方法:删除 2、跳过 3、删除 2、跳过 3 等

我正在寻找一种按特定顺序删除文件的方法:删除 2、跳过 3、删除 2、跳过 3 等

我正在处理一个隔行扫描视频文件,并从中创建了一个图像序列。我的目标是删除隔行扫描帧,在我的文件夹中,它是 2 个隔行扫描图像,后面跟着 3 个非隔行扫描图像。

有没有一种简单的方法可以删除具有该模式的隔行文件(依次删除 2 个,然后跳过接下来的 3 个,删除接下来的 2 个,跳过接下来的 3 个,等等)?

这些文件按顺序编号 ( 000001- XXXXXX)。
因此,基本上我想删除:

000001
000002

然后保存:

000003
000004
000005

然后删除:

000006
000007

等等。

答案1

如果你的文件名称的最后一位数字等于1,我理解有必要排除所有以数字结尾的文件:

  1,2,6,7

  000001
  000002
  000003
  000004
  000005
  000006
  000007
  000008
  000009
  000010
  1. 命令where带着旗帜??????,将列出所有以 0 开头且有 6 位数字/字符的文件。

    • 列出 000001-000100 之间的所有文件,但仅列出以 5 结尾的文件:
    F:\SUPER_USER\Q1556256>where .:?????5
    F:\SUPER_USER\Q1556256\000005
    F:\SUPER_USER\Q1556256\000015
    F:\SUPER_USER\Q1556256\000025
    F:\SUPER_USER\Q1556256\000035
    F:\SUPER_USER\Q1556256\000045
    F:\SUPER_USER\Q1556256\000055
    F:\SUPER_USER\Q1556256\000065
    F:\SUPER_USER\Q1556256\000075
    F:\SUPER_USER\Q1556256\000085
    F:\SUPER_USER\Q1556256\000095 
  2. 使用简单循环for并逐一列出数字,并使用它们来确定哪些文件应该被排除,因为它们的名称以预定义的数字结尾

@For %G in (1,2,6,7)...
  1. 添加一个For /F循环以使用命令列表中的输出,并where使用该命令组合来删除文件:

 @For /F %i in ('where .:?????%G')do @echo/del "%i"

  1. 检查echo输出是否正确,如果正确,则删除echo为了有效删除使用命令del
 @For /F %i in ('where .:?????%G')do echo/@del "%i"

  • 对于命令行:
@For %G in (1,2,6,7)do @For /F %i in ('where .:?????%G')do @del "%i"
  • 对于 bat/cmd 文件:
@echo off 

For %%G in (1,2,6,7)do For /F %%i in ('
where.exe .:?????%%~G')do del /q "%%~i"

  • 000001-000100 之间未删除的文件,并按
    命令按编号顺序列出:where .:??????|sort
F:\SUPER_USER\Q1556256\000003
F:\SUPER_USER\Q1556256\000004
F:\SUPER_USER\Q1556256\000005
F:\SUPER_USER\Q1556256\000008
F:\SUPER_USER\Q1556256\000009
F:\SUPER_USER\Q1556256\000010
F:\SUPER_USER\Q1556256\000013
F:\SUPER_USER\Q1556256\000014
F:\SUPER_USER\Q1556256\000015
F:\SUPER_USER\Q1556256\000018
F:\SUPER_USER\Q1556256\000019
F:\SUPER_USER\Q1556256\000020
F:\SUPER_USER\Q1556256\000023
F:\SUPER_USER\Q1556256\000024
F:\SUPER_USER\Q1556256\000025
F:\SUPER_USER\Q1556256\000028
F:\SUPER_USER\Q1556256\000029
F:\SUPER_USER\Q1556256\000030
F:\SUPER_USER\Q1556256\000033
F:\SUPER_USER\Q1556256\000034
F:\SUPER_USER\Q1556256\000035
F:\SUPER_USER\Q1556256\000038
F:\SUPER_USER\Q1556256\000039
F:\SUPER_USER\Q1556256\000040
F:\SUPER_USER\Q1556256\000043
F:\SUPER_USER\Q1556256\000044
F:\SUPER_USER\Q1556256\000045
F:\SUPER_USER\Q1556256\000048
F:\SUPER_USER\Q1556256\000049
F:\SUPER_USER\Q1556256\000050
F:\SUPER_USER\Q1556256\000053
F:\SUPER_USER\Q1556256\000054
F:\SUPER_USER\Q1556256\000055
F:\SUPER_USER\Q1556256\000058
F:\SUPER_USER\Q1556256\000059
F:\SUPER_USER\Q1556256\000060
F:\SUPER_USER\Q1556256\000063
F:\SUPER_USER\Q1556256\000064
F:\SUPER_USER\Q1556256\000065
F:\SUPER_USER\Q1556256\000068
F:\SUPER_USER\Q1556256\000069
F:\SUPER_USER\Q1556256\000070
F:\SUPER_USER\Q1556256\000073
F:\SUPER_USER\Q1556256\000074
F:\SUPER_USER\Q1556256\000075
F:\SUPER_USER\Q1556256\000078
F:\SUPER_USER\Q1556256\000079
F:\SUPER_USER\Q1556256\000080
F:\SUPER_USER\Q1556256\000083
F:\SUPER_USER\Q1556256\000084
F:\SUPER_USER\Q1556256\000085
F:\SUPER_USER\Q1556256\000088
F:\SUPER_USER\Q1556256\000089
F:\SUPER_USER\Q1556256\000090
F:\SUPER_USER\Q1556256\000093
F:\SUPER_USER\Q1556256\000094
F:\SUPER_USER\Q1556256\000095
F:\SUPER_USER\Q1556256\000098
F:\SUPER_USER\Q1556256\000099
F:\SUPER_USER\Q1556256\000100

答案2

PowerShell,根据我之前的(未答复的)评论。现在看到您在键入时描述的是一个范围而不是带连字符的文件名,000000-xxxxxx这让事情变得更加简单。

详细:

$Source = 'c:\folder\path'
Get-ChildItem $Source -File | Where {
   [Int]$_.Name % 5 -in @(1,2)
} | Remove-Item

袖珍的:

gci 'c:\folder\path' -af | ? { [Int]$_.Name % 5 -in @(1,2) } | ri

获取 ChildItem/gci

哪里-对象/?

移除項目/ri

%(模量)

-在

@(1,2)

样本:

PS C:\...\seldel>gci -name
000001
000002
000003
000004
000005
000006
000007
000008
000009
000010
000011
000012
000013
000014
000015
000016
000017
000018
000019
000020
000021
000022
000023
000024
000025
PS C:\...\seldel>gci -af | ? { [Int]$_.Name % 5 -in @(1,2) } | ri
PS C:\...\seldel>gci -name
000003
000004
000005
000008
000009
000010
000013
000014
000015
000018
000019
000020
000023
000024
000025
PS C:\...\seldel> 

相关内容