最近,同事要我幫忙處理一批遙感影像的換帶問題,
也就是將影像文件中的*.tfw文件中的大地坐標x,y值前面加上帶號,這個搞過GIS的同學應該都知道有這么一回事。
這個*.tfw文件格式是這樣的:
0
0.0
0.0
0000
74738.000000
3447799.000000
其中第五行是缺少帶號的,需要在前面加上帶號,比如:38
那樣就變成了3874738.000000
這件事情本是很簡單的,打開文件加上不就OK,然而由於這樣的影像數量很多,所以就要我搞個小程序,好方便點。
想了一下,覺得還是批處理腳本最方便。
於是查了下資料,寫了個:
1 @echo off 2 call :ask 3 for /f "delims=" %%i in ('dir /s/b *.tfw') do ( 4 setlocal enabledelayedexpansion 5 set /a l=0 6 for /f %%a in ('type "%%~fi"') do ( 7 set /a l+=1 8 set "foo=%%a" 9 rem 如果不是38度帶,把這里的38換成別的數字 10 if !l!==5 set "foo=38%%a" 11 echo !foo!>>"%%~fi._" 12 ) 13 move "%%~fi._" "%%~fi" 14 ) 15 exit 16 :ask 17 set /p q=要不要添加帶號? (y/n) 18 if /i %q%==n exit 19 goto :eof
簡單介紹下,首先來個提示,問是不是要添加帶號,因為一旦執行就所有文件都執行了。
然后是調用 for /f 查找文件夾下所有的tfw文件。不清楚這個的可以去http://www.bathome.net/thread-2189-1-1.html看下教程。
接着查每一個文件的第五行,在前面加上帶號38。
將這個文件保存成.bat格式,放在影像的根目錄下面。
一點運行,就OK。
過2天,同事又找到我,這個是加上帶號,如果我又想去掉呢?那怎么辦,這個問題也好辦:
1 @echo off 2 echo 只有帶號完整的時候才點這個,否則會損壞數據! 3 pause 4 call :ask 5 for /f "delims=" %%i in ('dir /s/b *.tfw') do ( 6 setlocal enabledelayedexpansion 7 set /a l=0 8 for /f %%a in ('type "%%~fi"') do ( 9 set /a l+=1 10 set "foo=%%a" 11 rem 下面這句刪除第五行的前兩個字符。 12 if !l!==5 set "foo=!!foo:~2,12!!" 13 echo !foo!>>"%%~fi._" 14 ) 15 move "%%~fi._" "%%~fi" 16 ) 17 exit 18 19 :ask 20 set /p q=要不要去帶號? (y/n) 21 if /i %q%==n exit 22 goto :eof