批處理修改文本中指定行


   最近,同事要我幫忙處理一批遙感影像的換帶問題,

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM