我有一个带有顺序命名图像的文件夹(a0001,a0002,a0003等),我想知道是否有办法删除每3个文件而不触及其他文件。
例如,我有:a0001,a0002,a0003,a0004,a0005 a0006,a0007,a0008,a0009
之后我想拥有:a0001,a0005,a0009
答案 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
正确地用于for
(FOR
循环中的环境变量在循环开始时展开,并且直到 结束DO
部分后)ndel c:\temp\*.tmp 0
与del c:\temp\*.tmp
相同(因为跳过0 =全部)