Tôi có rất nhiều hình ảnh từ một thư mục cần được trừ vào một hình ảnh khác (thư mục khác) và tôi không biết làm thế nào để tự động làm điều đó trong quy trình hàng loạt. Bất kỳ ý tưởng?
Sau đây là các mục tiêu cho tệp bó:
- Tạo một thư mục đầu ra
- Tạo thư mục Proc_path chỉ cho các tệp được xử lý
- Trừ hình ảnh từ thư mục sang hình ảnh khác từ một hình ảnh khác danh mục
Đã làm hết sức mình để tạo ra một phần của kịch bản này. Xin lỗi nếu nó quá lộn xộn, tôi biết tôi không làm đúng. Tôi hy vọng bạn hiểu.
@echo on
setlocal EnableDelayedExpansion
set "in_path=E:\Proc\Mer\"
set "out_path=E:\Proc\Abcde"
set "two_path=E:\Proc\Me\"
set "proc_path=E:\Proc\Proc_Mer_Fi"
::Don't modify the following variables
set "yearDay="
set "fileList="
md %out_path%
md %proc_path%
::Process all *.tif files in input path
cd /d "%in_path%"
for %%a in (*.tif) do (
set "fileName=%%a"
if %1 == 001-031 goto :condition1 ::reg/leap
if %2 == 032-059 goto :condition2 ::reg
if %3 == 032-060 goto :condition2 ::leap
if %4 == 060-090 goto :condition3 ::reg
if %5 == 061-091 goto :condition3 ::leap
if %6 == 091-120 goto :condition4 ::reg
if %7 == 092-121 goto :condition4 ::leap
if %8 == 121-151 goto :condition5 ::reg
if %9 == 122-152 goto :condition5 ::leap
if %10 == 152-181 goto :condition6 ::reg
if %11 == 153-182 goto :condition6 ::leap
if %12 == 182-212 goto :condition7 ::reg
if %13 == 183-213 goto :condition7 ::leap
if %14 == 213-243 goto :condition8 ::reg
if %15 == 214-244 goto :condition8 ::leap
if %16 == 244-273 goto :condition9 ::reg
if %17 == 245-274 goto :condition9 ::leap
if %18 == 274-304 goto :condition10 ::reg
if %19 == 275-305 goto :condition10 ::leap
if %20 == 305-334 goto :condition11 ::reg
if %21 == 306-335 goto :condition11 ::leap
if %22 == 335-365 goto :condition12 ::reg
if %23 == 336-366 goto :condition12 ::leap
:condition1
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_jan.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition2
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_feb.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition3
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_mar.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition4
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_apr.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition5
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_may.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition6
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_june.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition7
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition8
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_aug.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition9
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_sep.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition10
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_oct.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition11
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_nov.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:condition12
gdal_calculate --outfile=%out_path%\Abcde!yearDay!.Q_WER.Tera.tif !fileList! --calc="((one-two)/(one+two))" --two=%two_path%\two_abc_dec.tif --one=%in_path%\A!yearDay!.Q_WER.Tera.tif !fileList! --extent=INTERSECT
goto end
:: Move processed files to a different directory
for %%a in (!fileList!) do move %%a "%proc_path%" >nul
for
vòng lặp, sử dụng call :conditionX
thay vì goto
, nếu không, bạn sẽ nhảy ra khỏi vòng lặp và không bao giờ quay lại nó. Hãy chắc chắn để đóng vòng lặp của bạn trước khi khai báo các trình xử lý điều kiện. Bên trong xử lý điều kiện, thay vì goto end
, sử dụng goto :eof
.
set "yearDay="
và set "fileList="
? Bạn phải sửa đổi chúng, như tiếp theo được sử dụng trong dal_calculate
các cuộc gọi. Và trong các cuộc gọi đó, bạn sử dụng, ví dụ: %in_path%\A!yearDay!.Q_WER.Tera.tif
kết quả là E:\Proc\Mer\\A...
(dấu gạch chéo kép). Còn những năm nhuận thì sao?
set "yearDay=
và set "fileList="
được đặt thành trống. Bởi vì có nhiều tập tin và năm thay đổi. Tôi hy vọng tôi nhận được quan điểm của bạn?
shift
chỉ huy. Xemshift /?
để biết thêm.