Batch file 批处理文件/脚本每3个文件删除一个目录
我有一个文件夹,其中有顺序命名的图像(a0001、a0002、a0003等),我想知道是否有办法在不接触其他文件的情况下删除每3个文件 例如,我有:a0001,a0002,a0003,a0004,a0005,a0006,a0007,a0008,a0009Batch file 批处理文件/脚本每3个文件删除一个目录,batch-file,Batch File,我有一个文件夹,其中有顺序命名的图像(a0001、a0002、a0003等),我想知道是否有办法在不接触其他文件的情况下删除每3个文件 例如,我有:a0001,a0002,a0003,a0004,a0005,a0006,a0007,a0008,a0009 在我想要:a0001、a0005、a0009之后,我不确定语法,因为我通常不编写批处理脚本,但应该是这样的: set z = 0 for /f %%a IN (‘dir /b *’) do { set z = z + 1; if (z
在我想要:a0001、a0005、a0009之后,我不确定语法,因为我通常不编写批处理脚本,但应该是这样的:
set z = 0
for /f %%a IN (‘dir /b *’) do {
set z = z + 1;
if (z % 3 == 0) del %%a
}
这是一个可以使用的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:\temp\*.tmp
)要跳过的文件数(默认为3
,如您所请求)以及使用的顺序(默认为n
-filename)。您可以使用任何目录排序,例如N
(名称)或ES
(扩展名然后大小),请参阅DIR/?
,了解有关排序的详细信息。您不应该使用/o
(与dir不同)启动order命令-它是自动加前缀的
来源: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
注意事项:
- 如果%\u r%==0 echo%1,则需要注释掉
,并删除起始注释
以实际执行删除操作(一旦您满意它的工作:):-以删除-
- 如果键入
(不带参数),则前几行仅输出用法ndel
- Skip three与每四个文件删除一次相同,这就是为什么
采用Skip+1,默认设置为4(Skip 3)evry
可以包括文件夹和复杂的通配符匹配(就像filespec
)dir
- 必须使用子例程通过
正确地for
计数
(
循环中的环境变量在循环开始时展开,直到for
部分结束后才会更改)DO
- 调用
与ndel c:\temp\*.tmp 0
相同(因为跳过0=all)del c:\temp\*.tmp
@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