删除最后一行:http://www.cn-dos.net/forum/viewthread.php?ti ...
对本文的修改!
以前写的代码没有达到应有的效果!
因为,若最后一行是纯回车符的话,输出来的还是存在,
这个程序,在原有的基础上,稍微修改了一下,达到效果!
大家可以检验!
@echo off
setlocal EnableDelayedExpansion
rem 删除临时文件。
if exist result*.txt del result*.txt
rem 计算行数,考虑了空行。
copy test.txt tt.txt
echo __>>tt.txt
for /f "delims= skip=2" %%i in ('find /v /n "" tt.txt') do set /a line+=1
::set/a num=line
del tt.txt
echo test.txt文本的行数是:!line!。
pause>nul
rem 下面是输出去除最后一行后的文本内容,不过用了几个临时文件进行转移。
for /f "tokens=1,2* delims=" %%i in ('findstr /x /n .* test.txt') do (
set /a l+=1
if "!l!" neq "!line!">>result0.txt echo %%i
)
set /a l=line-2
set /a ll=line-1
for /f "tokens=1,* delims=:" %%i in (result0.txt) do (
rem 此处原来这里是1,2*
set /a n+=1
::if "!n!" neq "!line!" ( if not "%%j"=="" (echo %%j>>result.txt) else echo.>>result.txt)
if !n! leq !l! ( if not "%%j"=="" (echo %%j>>result.txt) else (echo.>>result.txt))
if !n! equ !ll! set/p a=%%j>>result.txt<nul
)
rem 删除不需要的临时文件result0.txt,只保留最后结果。
del result0.txt
完毕,!
在完善一次,应该没有错了!
[ Last edited by scriptor on 2007-9-15 at 01:26 PM ]
这个是否简单点呢?
@echo off
cd.>test2.txt
for /f "delims=:" %%i in ('findstr /n . test.txt') do set n=%%i
set /a nm=%n%
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set /a mn=%%i 2>nul
set "m=%%i"
setlocal enabledelayedexpansion
set "m=!m:*:=!"
if !nm! EQU !mn! goto end
echo.!m!>>test2.txt
endlocal
)
:end
pause
Originally posted by terse at 2007-9-15 13:38:
这个是否简单点呢?
@echo off
cd.>test2.txt
for /f "delims=:" %%i in ('findstr /n . test.txt') do set n=%%i
set /a nm=%n%
for /f "delims=" %%i in ('findstr /n . ...
我这里都好的 不知道你怎么试的 最后确实多了空行 但可以处理空行
test.txt内容如下:
@echo off
cd.>test2.txt
for /f "delims=:" %%i in ('findstr /n . test.txt') do set n=%%i
set /a nm=%n%
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set /a mn=%%i 2>nul
set "m=%%i"
setlocal enabledelayedexpansion
set "m=!m:*:=!"