如何用批处理删除.shp≤100字节对应的整套Esri Shapefile文件
批量清理小体积Shapefile的批处理脚本
需求说明
- 文件夹内的Esri Shapefile由5个配套文件组成:
.dbf、.prj、.qpj、.shp、.shx - 仅当**
.shp文件大小≤100字节**时,删除该Shapefile对应的整套5个文件
处理前文件示例
A.dbf A.prj A.qpj A.shp (100byte) A.shx B.dbf B.prj B.qpj B.shp (150byte) B.shx C.dbf C.prj C.qpj C.shp C.shx (243byte)
处理后保留文件示例
B.dbf B.prj B.qpj B.shp B.shx C.dbf C.prj C.qpj C.shp C.shx
原有代码问题
你之前找到的批处理代码会删除所有小于100字节的文件,无法精准匹配Shapefile的整套文件需求,代码如下:
@echo off setlocal :: Size is in bytes set "min.size=100" for /f "usebackq delims=;" %%A in (`dir /b /A:-D *.*`) do If %%~zA LSS %min.size% del "%%A"
正确的批处理脚本
@echo off setlocal enabledelayedexpansion :: 设置阈值:小于等于该字节数的.shp文件,其配套文件将被删除 set "threshold=100" :: 遍历所有.shp文件 for /f "delims=" %%s in ('dir /b /A:-D "*.shp"') do ( :: 获取当前.shp文件的大小 set "shpSize=%%~zs" :: 判断大小是否≤阈值 if !shpSize! LEQ %threshold% ( :: 获取文件名前缀(去掉.shp后缀) set "prefix=%%~ns" :: 删除对应的5个配套文件 del "!prefix!.dbf" "!prefix!.prj" "!prefix!.qpj" "!prefix!.shp" "!prefix!.shx" echo 已删除小体积Shapefile:!prefix! ) ) endlocal pause
关键逻辑说明
setlocal enabledelayedexpansion:启用延迟变量扩展,确保循环内变量能实时更新dir /b /A:-D "*.shp":仅列出当前文件夹下的.shp文件(不含子文件夹)%%~zs:提取.shp文件的字节大小%%~ns:提取.shp文件的前缀名(去除后缀)- 批量删除命令:一次性清理对应Shapefile的5个配套文件
内容的提问来源于stack exchange,提问作者Owen
相关产品推荐
相关产品推荐

