最近,同事要我帮忙处理一批遥感影像的换带问题,
也就是将影像文件中的*.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