我想删除目录中小于特定大小的所有文件。有谁知道是否有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.pdf
我可能需要转换为“DOS”,它看起来像file_name.pdf
或类似的东西。
答案 0 :(得分:10)
从批处理脚本中尝试:
@echo off
setlocal
for /f "usebackq delims=;" %%A in (`dir /b *.pdf`) do If %%~zA LSS 3145728 del "%%A"
答案 1 :(得分:1)
好的,所以我在cmd脚本中使用了AtomicParsley,使用--overWrite选项将图稿添加到400多个子文件夹中的所有MP4电影中。它有时barfs和orignal文件留下不到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替换echo并更改2048以搜索不同的大小。
答案 2 :(得分:1)
BTW:对我来说,使用PowerShell(在Windows 10上)更简单:
我只在我希望删除小于20MB的文件的目录上执行此操作:
ls | where {$_.Length -lt 20mb} | Remove-Item
答案 3 :(得分:0)
以下是使用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
循环解析返回的列表,该循环保留实际删除命令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
时也是如此(意味着“相同的文件“应被视为”。
答案 4 :(得分:-2)
我不确定如何从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
答案 5 :(得分:-3)
Del命令中没有可以根据文件大小删除文件的开关。