2014-01-27 2 views
0

Я новичок в командной строке работы и не уверен, если это возможно, чтобы делать то, что я хочу в этом файле .bat ...Windows .bat парный цикл процесса?

У меня есть пары изображений в инфракрасном и естественный цвет имени, как это «001_x_y_NIR.tif» и "001_x_y_RGB.tif", где ведущие три цифры служат для идентификации пар изображений.

Этот код объединяет полосы изображений из двух трехполосных входных файлов в один 4-полосный файл изображения.

Я хочу, чтобы следующий код запускался через папку, содержащую несколько пар изображений NIR/RGB, так что она выполняет пакет на 001_x_y_NIR.tif и 001_x_y_RGB.tif, а затем делает это на 002 ..., 003. .., и т. д.

Как написано, это хорошо работает, если у меня есть только одна пара в исходной папке, но я не знаю, что делать, чтобы она проходила по очереди.

set path=%path%;C:\userbin\gdal; 
mkdir single_band 
for %%i in (*.tif) do gdal_translate -b 1 -of "gtiff" -co "tfw=yes" -a_srs "epsg:26717" %%i .\single_band\B1_%%~ni.tif 
for %%i in (*.tif) do gdal_translate -b 2 -of "gtiff" -co "tfw=yes" -a_srs "epsg:26717" %%i .\single_band\B2_%%~ni.tif 
for %%i in (*.tif) do gdal_translate -b 3 -of "gtiff" -co "tfw=yes" -a_srs "epsg:26717" %%i .\single_band\B3_%%~ni.tif 
cd /single_band 
for /f "delims=_. tokens=1-6" %%i in ('dir /b *.t??') do ren %%i_%%j_%%k_%%l_%%m.%%n %%i_%%m.%%n 
gdalbuildvrt -separate -overwrite 4bandout_IRGB.vrt B1_NIR.tif B1_RGB.tif B2_RGB.tif B3_RGB.tif 
mkdir 4band 
gdal_translate -of "gtiff" -co "tfw=yes" -a_srs "epsg:26717" 4bandout_IRGB.vrt .\4band\IRGB.tif 
del *.t?? 

....... С помощью mihai_mandis ответа (СПАСИБО!):

for %%i in (*NIR.tif) do (
set RGBName=%%i 
set RGBName=!RGBName:NIR=RGB! 
echo %%i,!RGBName! >>.\single_band\RGBNIR_list.txt 

получить список .txt:

001_x_y_NIR.tif, 001_x_y_RGB.tif
002_a_b_NIR.tif, 002_a_b_RGB.tif
и т.д ...

Мне очень хотелось бы позвонить в этот .txt. список и прокручивать его по строкам, пару по паре, чтобы выполнить мой процесс, создавая мои выходы для первой пары, удаляя мои промежуточные файлы, а затем перемещаясь по второй паре и т. д.

Также, чтобы не перезаписывать мои выходы, я хотел бы нести ведущие трехзначные идентификаторы до моего конечного продукта как XXX_IRGB.tif ... Любая другая мысль?

Благодаря

+1

Обязательно ли это быть периодическим? Если вы начинаете новый с консольной/командной строки в Windows, вы должны дать PowerShell внешний вид, так как это путь вперед. – alroc

ответ

0

Вы можете использовать код сильфона ти перебирать файлы и получить как имена файлов (RGB и NIR) в одной и той же итерации. Вы можете использовать эти имена для вызова своей команды по желанию.

@echo off 
setlocal enabledelayedexpansion 

for %%i in (*NIR.tif) do (
    rem %%i is the NIR file name 
    set RGBName=%%i 
    set RGBName=!RGBName:NIR=RGB! 
    echo "%%i" "!RGBName!" 
)