使用批处理文件 For 循环将 .tif 送入 GIS 进程 (gdal_polygonize) 时出现问题

使用批处理文件 For 循环将 .tif 送入 GIS 进程 (gdal_polygonize) 时出现问题

在此先感谢您的帮助。

我已经阅读、试验并为此绞尽脑汁好几天了,确实需要一些帮助。这是我第一次尝试批处理文件。

我正在尝试循环遍历文件夹中的 .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"

相关内容