本帖最后由 yyykkkyyyy 于 2011-11-29 02:03 编辑
用BAT来处理BAT,不说很难,但象二楼那样简单处理肯定是不行的。既然高手们没来,我这算抛砖引玉吧。
如果按提问里就那五行需要处理实用范围也太窄了,需要按具体文本定哪几行,按“例如”的情况
可用下面代码取得行序号 :- for /f "delims=:" %%i in ('findstr/in "echo.*>>.%%4%%\.txt" a.bat')do call set ns=%%ns% %%i
复制代码 我还是写个指定几个行序号通用性强一些,直接在代码里写定了,可以自己改成临时用set/p接收输入的- @echo off
- set fs=a.bat
- set fd=b.bat
- rem 下一行表示 加/减 :: 在第一个数前附 +/- 的行序号(空行计入序号)
- set ns=+2 3 4 6
- set "f=%ns:~,1%1"
- set "ns=%ns:~1%"
- for /f "delims=:" %%i in ('findstr/nb "::" "%fs%"')do set/a #%%i=1
- for /f "delims=:" %%i in ('findstr/nb ":::" "%fs%"')do set "##%%i=:"
- for /f "delims=:" %%i in ('findstr/nb ":" "%fs%"'
- )do if not defined #%%i set "##%%i=:"
- for %%i in (%ns%)do (
- if defined #%%i (
- if %f% lss 0 set fg=y&set/a _%%i=f)else (
- if %f% gtr 0 set fg=y&set/a _%%i=f)
- )
- if not defined fg echo 不需要更改&goto :end
- cd.>"%fd%"
- for /f "tokens=1* delims=: " %%i in ('findstr/n .* "%fs%"')do (
- if defined _%%i (>tem.yky echo.%%j&call :yky %%i)else (
- (if defined #%%i set/p=::<nul
- if defined ##%%i set/p=:<nul
- echo.%%j)>>"%fd%"))
- del tem.yky
- echo ok&goto :end
- :yky
- call set xx=%%_%1%%
- if %xx% gtr 0 (
- (set/p=::<nul
- call set/p=%%##%1%%<nul&type tem.yky)>>"%fd%"&goto :eof)
- for /f "tokens=* delims=: " %%i in (tem.yky)do (
- (call set/p=%%##%1%%<nul
- echo.%%i)>>"%fd%" &goto :eof)
- :end
- pause
复制代码
|