批处理修改文本中指定行

   最近,同事要我帮忙处理一批遥感影像的换带问题,

也就是将影像文件中的*.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

 

posted @ 2013-11-21 23:13  挥挥  阅读(5351)  评论(1编辑  收藏  举报