中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 18:37
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何删除含有特殊字符文件的最后一行 查看 984 回复 11
楼 主 [已结]如何删除含有特殊字符文件的最后一行 发表于 2007-09-14 11:01 ·  中国 江西 抚州 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
原文件为:
sfgsdfgsdfgsdfg
sdfgsdfgsdfgsdfg
sdfgsdfgsdfgsdfg
sdfgsdfgsdfgsdfg
sdfgsdfgsdfgsdfgs
echo :end>>c:\dostools\backup.tmp
456468764
:end
我的批处理为:
@ECHO OFF
for /f "delims=:" %%i in ('findstr /n . test.txt') do set /a num=%%i-1
for /f "tokens=*" %%i in ('more test.txt +%num%') do set xxx=%%i
type test.txt|find /v "%xxx%">backup.txt&&echo %num%
但是执行结果除了删除了最后一行,还把echo :end>>c:\dostools\backup.tmp这行给删除了!请各位老大帮忙修改下,让此批处理支持特殊字符!

[ Last edited by hbby on 2007-9-15 at 03:14 PM ]
2 发表于 2007-09-14 11:07 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
findstr $ test.txt>backup.txt
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
3 发表于 2007-09-14 11:12 ·  中国 江西 抚州 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
试过这个代码,可以删除最后一行,但是不可以叠加使用,如果再使用不能再删除倒数第二行
4 发表于 2007-09-14 11:17 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
5 发表于 2007-09-14 11:20 ·  中国 江西 抚州 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
我昨天晚上就查到了这页,用的就是这页的代码,可是特殊字符解决不了,老大能帮忙修改下吗?谢谢
6 发表于 2007-09-14 11:41 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
@ECHO OFF
for /f "delims=:" %%i in ('findstr /n . test.txt') do set num=%%i
for /f "tokens=1* delims=:" %%i in ('findstr /n . test.txt') do if not "%%i"=="%num%" if not "%%j"=="" echo %%j>>backup.txt
pause
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
7 发表于 2007-09-14 16:31 ·  中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@echo off&setlocal enabledelayedexpansion
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"
set "m=!m:*:=!"
if !nm! EQU !mn! goto end
echo.!m!>>test2.txt
)
:end
pause
8 发表于 2007-09-15 10:39 ·  中国 江西 抚州 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
7楼的兄弟,非常感谢你的帮助,经我测试,此P处理用于删除自身内容的最后一行,文本内容会有变化,也就是说此P处理的本身还有特殊字符,还有更好的方法吗?
9 发表于 2007-09-15 11:26 ·  中国 广东 广州 电信
高级用户
★★
我思故我在
积分 512
发帖 228
注册 2007-01-21 10:31
19年会员
UID 77225
性别 男
状态 离线
我确实是只菜鸟,而且这里X人太多,所以我不敢装X。谁要再说我装X,我就XXOO他。
10 发表于 2007-09-15 12:52 ·  中国 北京 中国科学院研究生院玉泉四公寓
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
Originally posted by hbby at 2007-9-15 10:39:
7楼的兄弟,非常感谢你的帮助,经我测试,此P处理用于删除自身内容的最后一行,文本内容会有变化,也就是说此P处理的本身还有特殊字符,还有更好的方法吗?



看看我写的这个
经我修改后,对你的要求符合不?

http://www.cn-dos.net/forum/viewthread.php?tid=27926&fpage=1&highlight=%E6%9C%80%E5%90%8E%E4%B8%80%E8%A1%8C&page=2
17楼的代码!


另外,你原来的那个测试文本
经它测试已经成功!
11 发表于 2007-09-15 13:34 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by hbby at 2007-9-15 10:39:
7楼的兄弟,非常感谢你的帮助,经我测试,此P处理用于删除自身内容的最后一行,文本内容会有变化,也就是说此P处理的本身还有特殊字符,还有更好的方法吗?


这个应该是可以了! 试一下吧!

@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

[ Last edited by terse on 2007-9-15 at 01:35 PM ]
12 发表于 2007-09-15 15:14 ·  中国 江西 抚州 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
高手真实个顶个的高,强手个顶个的强啊!非常感谢大家!
论坛跳转: