中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 05:41
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何编写P用来删除文本的最后3行
楼 主 [已结]如何编写P用来删除文本的最后3行 发表于 2007-09-15 10:15 ·  中国 江西 抚州 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
UID 41691
状态 离线
请高手指导如何编写P处理来删除文本的最后3行,而且文本中包含特殊字符,希望用系统自带的命令!谢谢!

[ Last edited by hbby on 2007-9-15 at 03:03 PM ]
2 发表于 2007-09-15 11:10 ·  中国 北京 中国科学院研究生院玉泉四公寓
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线

@echo off
rem delete the last 3 row in a file!
setlocal enabledelayedexpansion
echo _MyFun_>>da.txt
for /f "delims= tokens=1,2*" %%a in ('@find /n /v "" da.txt') do set n=%%a
echo 文件的原始行数为:%n%
pause
echo 将执行删除最后三行的操作!
pause
set /a l=n-3
echo %l%
for /f "delims=" %%a in (da.txt) do (
set /a m+=1
if !m! leq !l! echo %%a>>new_a.txt
)
endlocal
pause

自己体会吧!
3 发表于 2007-09-15 11:59 ·  中国 江西 抚州 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
UID 41691
状态 离线
感谢楼上的朋友,但是文件中含有空行的话就删除不到最后几行了,能再看看吗?谢谢
4 发表于 2007-09-15 14:37 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
UID 42345
状态 离线
试一下
@echo off
cd.>test2.txt
for /f "delims=:" %%i in ('findstr /n . test.txt') do set n=%%i
set /a nm=%n% -2>nul
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

[ Last edited by terse on 2007-9-15 at 02:46 PM ]
5 发表于 2007-09-15 14:43 ·  中国 北京 中国科学院研究生院玉泉四公寓
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
Originally posted by hbby at 2007-9-15 11:59:
感谢楼上的朋友,但是文件中含有空行的话就删除不到最后几行了,能再看看吗?谢谢



是的
那个写得不完善

你用楼上的吧!(4楼)
那个快1
6 发表于 2007-09-15 15:03 ·  中国 江西 抚州 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
UID 41691
状态 离线
都是高手,谢谢,这个可以了!
7 发表于 2007-09-15 15:57 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
sed -e :a -e "$d;N;2,3ba" -e "P;D" 1.txt>>2.txt
论坛跳转: