Проблемы с использованием пакетного файла цикла For для подачи .tifs в процесс ГИС (gdal_polygonize)

984
Vergentorix

Заранее спасибо за вашу помощь с этим.

Я уже пару дней читаю, экспериментирую и бьюсь головой об стену, и могу действительно помочь. Это моя первая попытка пакетного файла.

Я пытаюсь перебрать файлы .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
Что с восклицательными знаками? На переменные типа `infile` следует ссылаться как`% infile% `, а не`! Infile! `? Возможно `!% Infile%!` Если вам нужны восклицательные знаки. Также, возможно, попробуйте `%% ni` вместо` %% nI`. Ƭᴇcʜιᴇ007 9 лет назад 0
Насколько я понимаю, восклицательные знаки необходимы для отложенного расширения. Но я очень новичок в этом, поэтому я вполне могу ошибаться. Vergentorix 9 лет назад 0

1 ответ на вопрос

2
dbenham

You have a few problems.

  • Your definition of MYPATH is wrong. Spaces are significant when doing SET assignments. You created a variable name with a space at the end and a value with a space in the front.

  • FOR variable names are case sensitive: %%i and %%I are not the same thing

  • SET outfile=%MYPATHFILE%.shp! would have to change to SET outfile=!MYPATHFILE!.shp

But your script can be simplified tremendously:

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

Or you could run a simple one liner from the command line, without any script:

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