Problemas ao usar um arquivo de lote Para loop para alimentar .tifs em um processo GIS (gdal_polygonize)

1

Agradecemos antecipadamente por sua ajuda com isso.

Eu tenho lido, experimentado e batido a cabeça contra a parede por alguns dias, e poderia realmente usar alguma ajuda. Esta é a minha primeira tentativa de arquivo em lote.

Estou tentando fazer um loop pelos arquivos .tif em uma pasta e executar um processo gdal neles. Eu tenho chamado o arquivo .bat via linha de comando no terminal OsGeo4W .

Posso executar com êxito o processo gdal_polygonize em arquivos individuais, mas não consegui executá-lo iterativamente.

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!
)

Minhas mensagens de erro:

Para o primeiro arquivo:

Warning 1: Layer name 'ESRI Shapefile' adjusted to >'ESRIShapefile' for XML validity. Warning 1: Field name '%~nI.shp' adjusted to '_nI.shp' to be a >valid XML element name. 0...10...20...30...40...50...60...70...80...90...100 - done. For subsequent files:

Arquivos subseqüentes:

ERROR 4: '!infile!' does not exist in the file system, and is not recognised as a supported dataset name. Unable to open !infile!

    
por Vergentorix 30.04.2014 / 17:08

1 resposta

2

Você tem alguns problemas.

  • Sua definição de MYPATH está errada. Espaços são significativos ao fazer atribuições SET. Você criou um nome de variável com um espaço no final e um valor com um espaço na frente.

  • FOR nomes de variáveis fazem distinção entre maiúsculas e minúsculas: %%i e %%I não são a mesma coisa

  • SET outfile=%MYPATHFILE%.shp! precisaria mudar para SET outfile=!MYPATHFILE!.shp

Mas seu script pode ser simplificado tremendamente:

for %%F in ("C:\Users\mkcarte2\Desktop\Polygonize\*.tif") do (
  gdal_polygonize "%%F" "ESRI Shapefile" "%%~dpnF.shp"
)

Ou você pode executar um simples liner a partir da linha de comando, sem nenhum script:

for %F in ("C:\Users\mkcarte2\Desktop\Polygonize\*.tif") do gdal_polygonize "%F" "ESRI Shapefile" "%~dpnF.shp"
    
por 01.05.2014 / 03:22