中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-05 20:23
48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » [原创]终于都解决了-显示行数&删除最后一行
可打印版本  3,121 / 22
第16楼 electronixtar 发表于 2007-02-28 08:56
铂金会员 发帖 2,672 积分 7,493
Originally posted by scriptor at 2007-2-28 02:55:


你怎么老是减我的分!?

多找找自己原因啦~~
第17楼 scriptor 发表于 2007-09-15 12:31
银牌会员 发帖 555 积分 1,187
Originally posted by scriptor at 2007-2-26 13:02:
对于自己提出的问题,
显示行数:http://www.cn-dos.net/forum/viewthread.php?tid=27919&fpage=1

删除最后一行: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 ]
第18楼 terse 发表于 2007-09-15 13:38
银牌会员 发帖 946 积分 2,404
这个是否简单点呢?
@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
第19楼 scriptor 发表于 2007-09-15 14:19
银牌会员 发帖 555 积分 1,187
测试了
有个问题是
不能处理含有!的行中的某些字符
比如 !#$%@
输出会把 ! 省掉,因为setlocal在起作用!
第20楼 scriptor 发表于 2007-09-15 14:20
银牌会员 发帖 555 积分 1,187
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 . ...



不错a
有问题:
1: 最后一行多了一个空行!
2: 文本中间有空行时,同样不能处理好
比如:
1
2

3
....
你的代码输出是:
1
2
3
.....

最后还多了空行

[ Last edited by scriptor on 2007-9-15 at 02:23 PM ]
第21楼 terse 发表于 2007-09-15 14:24
银牌会员 发帖 946 积分 2,404
我这里都好的 不知道你怎么试的 最后确实多了空行 但可以处理空行
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:*:=!"

if !nm! EQU !mn! goto end

echo.!m!>>test2.txt

endlocal

)
:end

pause

%^>:::<|^aue||!str!~ ! @ # $ % ^ & * ( () <>nul

set ok=^
!m!

!m!

!m!
!nm!
!mn!
!mn!

[ Last edited by terse on 2007-9-15 at 02:31 PM ]
第22楼 scriptor 发表于 2007-09-15 14:33
银牌会员 发帖 555 积分 1,187
恩,好了
你的可以输出叹号!
我是说我的不能!!!

呵呵....
你的代码还是强啊!
但是最后一行呢?

不过还是多谢了
我的那个写得太肿了
哈哈....
第23楼 terse 发表于 2007-09-15 14:45
银牌会员 发帖 946 积分 2,404
Originally posted by scriptor at 2007-9-15 14:33:
恩,好了
你的可以输出叹号!
我是说我的不能!!!

呵呵....
你的代码还是强啊!
但是最后一行呢?

不过还是多谢了
我的那个写得太肿了
哈哈....

以为试我上面的不行呢!领会错误!so~!
上一页  1 2
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023