Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件/脚本每3个文件删除一个目录_Batch File - Fatal编程技术网

Batch file 批处理文件/脚本每3个文件删除一个目录

Batch 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、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 % 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与每四个文件删除一次相同,这就是为什么
    evry
    采用Skip+1,默认设置为4(Skip 3)
  • filespec
    可以包括文件夹和复杂的通配符匹配(就像
    dir
  • 必须使用子例程通过
    for
    正确地
    计数
    for
    循环中的环境变量在循环开始时展开,直到
    DO
    部分结束后才会更改)
  • 调用
    ndel c:\temp\*.tmp 0
    del c:\temp\*.tmp
    相同(因为跳过0=all)
@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