删除小于特定大小的文件

我想要删除目录中所有小于特定大小的文件。 有谁知道是否有一个Windows命令,将这样做? 就像del *.* where size<3kb

我目前正在这样做:

 for /F %%A in ("*.pdf") do If %%~zA LSS 20103409 del %%~fA 

我得到的输出是:

 C:\Documents and Settings\agordon\Desktop\test>If 6440450 LSS 20103409 del C:\Do cuments and Settings\agordon\Desktop\test\US Tox 01-06-11.pdf The system cannot find the path specified. 

即使这个PDF文件小到可以删除。

我究竟做错了什么?

这实际上是工作:

 FOR %%F IN (*.pdf) DO ( IF %%~zF LSS 20103409 DEL %%F ) 

但是它不识别文件名,因为它们有空格! 如何将Windows名称转换为该脚本中的“DOS”名称? 例如,Windows名称是file name.pdffile name.pdf我可能需要转换为“DOS”,它会看起来像这个file_name.pdf或类似的东西。

尝试从批处理脚本:

 @echo off setlocal for /f "usebackq delims=;" %%A in (`dir /b *.pdf`) do If %%~zA LSS 3145728 del "%%A" 

好的,所以我在一个cmd脚本中使用了AtomicParsley,通过–overWrite选项在400多个子文件夹中为我所有的MP4电影添加了插图。 它有时候会把条条和原文件放在不到2k的地方。 我需要一种方法来找到所有这些乱七八糟的MP4文件,所以我可以重新下载它们。

这就是我使用Mrchief的例子在命令行中使用的东西,它在Windows 7中像一个魅力。

 @for /f "usebackq delims=;" %A in (`dir /s /b *.mp4`) do @If %~zA LSS 2048 echo "%A" 

这是处理32个文件之后的输出

  D:\Movie>@for /f "usebackq delims=;" %A in (`dir /s /b *.mp4`) do @If %~zA LSS 2048 echo "%A" "D:\Movie\Action\Deadland (2009)\Deadland (2009).mp4" "D:\Movie\Science Fiction\Alien3 (1992)\Alien3 (1992).mp4" D:\Movie> 

你可以用del替换回显,并更改2048来搜索不同的大小。

这是使用robocopy及其过滤功能的另一种方法。 这是当robocopy /?时显示的File Selection Options的摘录robocopy /? 被输入到命令提示符窗口中:

  /MAX:n :: MAXimum file size - exclude files bigger than n bytes. /MIN:n :: MINimum file size - exclude files smaller than n bytes. /MAXAGE:n :: MAXimum file AGE - exclude files older than n days/date. /MINAGE:n :: MINimum file AGE - exclude files newer than n days/date. /MAXLAD:n :: MAXimum Last Access Date - exclude files unused since n. /MINLAD:n :: MINimum Last Access Date - exclude files used since n. (If n < 1900 then n = n days, else n = YYYYMMDD date). 

因此/MIN/MAX选项可以在这里应用。 由于我们不想复制任何文件,因此使用/L选项可以列出所有将在不使用开关的情况下进行复制的项目,然后使用for /F循环解析返回的列表,该for /F循环在实体中保存实际的删除命令del

 set "TARGETDIR=." set "FILES=*.pdf" for /F "tokens=*" %%F in (' robocopy "%TARGETDIR%" "%TARGETDIR%" "%FILES%" ^ /L /IS /FP /NC /NS /NDL /NP /NJH /NJS ^ /MIN:0 /MAX:3071 ') do ( ECHO del "%%F" ) 

在测试之后,从脚本中删除大写的ECHO来实际删除文件。

除了/MIN/MAX/L ,还有其他一些在robocopy命令行中定义的选项,其中大部分都关心所需的输出,即匹配文件的完整路径的简单列表,没有任何额外的信息,如页眉,页脚或摘要。

源目录和目标目录都设置为我们的目标目录。 通常情况下,这是行不通的(你不能复制文件到自己),但是由于/L被声明,文件列表被生成,但是只有当交换机/IS被给出时(意味着“相同的文件”将被认为)。

顺便说一下:使用PowerShell(在Windows 10上)是我的更简单的方法:

我只在想要删除小于20MB的文件的目录上执行此操作:

 ls | where {$_.Length -lt 20mb} | Remove-Item 

我不知道如何从DOS上做到这一点,但这是我们以前使用过的东西; 它使用VBScript,所以你可以调用这个filesoversize.vbs。

 Dim strPath Dim lngSize Dim fso Dim fold Dim files Dim file lngSize = 10000 ' The threshold in bytes (this is 100k) strPath = "C:\temp\" 'The folder you want to start in Set fso = CreateObject("scripting.filesystemobject") Set fold = fso.GetFolder(strPath) Set files = fold.files For Each file In files If file.Size <= lngSize Then file.Delete True Next 

Del命令中没有一个会根据文件大小删除文件的开关。