在此先感谢您的帮助。
我已经阅读、试验并为此绞尽脑汁好几天了,确实需要一些帮助。这是我第一次尝试批处理文件。
我正在尝试循环遍历文件夹中的 .tif 文件并对它们运行 gdal 进程。我一直在命令行中调用 .bat 文件OsGeo4W终端。
我可以在单个文件上成功运行 gdal_polygonize 进程,但无法成功迭代运行它。
SETLOCAL EnableDelayedExpansion
SET MYPATH = C:\Users\mkcarte2\Desktop\Polygonize\
FOR /F %%i IN ('DIR /B %MYPATH%*.tif') DO (
SET MYPATHFILE=%%~nI ::Trying to parse only the filename, so that I don't stack extensions in the output file
SET infile=%%i
SET outfile=%MYPATHFILE%.shp!
gdal_polygonize %MYPATH%!infile! -F "ESRI Shapefile" %MYPATH%!outfile!
)
我的错误信息:
对于第一个文件:
警告 1:图层名称“ESRI Shapefile”调整为“ESRIShapefile”以确保 XML 有效性。警告 1:字段名称“%~nI.shp”调整为“_nI.shp”,作为有效的 XML 元素名称。0...10...20...30...40...50...60...70...80...90...100 - 完成。对于后续文件:
后续文件:
错误 4:文件系统中不存在“!infile!”,并且无法将其识别为受支持的数据集名称。无法打开 !infile!
答案1
你遇到了一些问题。
您对 MYPATH 的定义是错误的。执行 SET 赋值时,空格很重要。您创建的变量名末尾有一个空格,值前面也有一个空格。
FOR 变量名区分大小写:
%%i
和%%I
不是一回事SET outfile=%MYPATHFILE%.shp!
必须改为SET outfile=!MYPATHFILE!.shp
但你的脚本可以大大简化:
for %%F in ("C:\Users\mkcarte2\Desktop\Polygonize\*.tif") do (
gdal_polygonize "%%F" "ESRI Shapefile" "%%~dpnF.shp"
)
或者您可以从命令行运行一个简单的单行程序,无需任何脚本:
for %F in ("C:\Users\mkcarte2\Desktop\Polygonize\*.tif") do gdal_polygonize "%F" "ESRI Shapefile" "%~dpnF.shp"