我正在处理一个隔行扫描视频文件,并从中创建了一个图像序列。我的目标是删除隔行扫描帧,在我的文件夹中,它是 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
命令
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
使用简单循环
for
并逐一列出数字,并使用它们来确定哪些文件应该被排除,因为它们的名称以预定义的数字结尾
@For %G in (1,2,6,7)...
- 添加一个
For /F
循环以使用命令列表中的输出,并where
使用该命令组合来删除文件:
@For /F %i in ('where .:?????%G')do @echo/del "%i"
- 检查
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
样本:
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>