Windows .bat成对循环过程?

时间:2014-01-27 18:25:56

标签: windows batch-file gdal

我是命令行工作的新手,不确定是否可以在此.bat文件中执行我想要的操作...

我有红外线和自然色的图像对,命名为“001_x_y_NIR.tif”和“001_x_y_RGB.tif”,其中前三位用于识别图像对。

此代码将两个3波段输入文件中的图像波段拼接成一个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 个答案:

答案 0 :(得分: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!"
)