中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结][求助]-如何从一文本的最后行向前读取所有行
« [1] [2] »
作者:
标题: [已结][求助]-如何从一文本的最后行向前读取所有行 取消高亮 | 上一主题 | 下一主题
h2o
初级用户





积分 44
发帖 18
注册 2006-10-9
状态 离线
『楼 主』:  [已结][求助]-如何从一文本的最后行向前读取所有行

如何从一文本的最后行向前读取所有行
================
re.txt:
--------
123
456
789
--------
================
我想让批处理读取的时候顺序是:
789
456
123

请问该如何实现呢?我新学批处理的 大家不要说我懒 这个问题我已经自己研究了一周了
可是系统的帮助里的内容似乎是有点难理解 许是我悟性不高
希望能得到论坛的朋友们指点 先行谢过了

=================
=================
在热心朋友的帮助下 解决了问题 长了知识 谢谢大家
希望以后也有机会帮助大家

[ Last edited by h2o on 2006-10-16 at 12:37 ]

2006-10-16 05:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
h2o
初级用户





积分 44
发帖 18
注册 2006-10-9
状态 离线
『第 2 楼』:  

哦 还有一个也是不大懂的
bat 如何实现生成一个 100-200 位数之间的一个 "随机" 字串( 字符是 0-9 A-F )

比如
4C3B28A5…… ( n 个字符,n=[100,200] )

迷雾里 盼指引...

2006-10-16 06:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 3 楼』:  


  难啊,我也不会,希望有高手来解决此问题。我也顺便学习学习 :)


2006-10-16 06:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 4 楼』:  

读入  re.txt 要倒序的文件,生成  rr.txt 目标文件。
没加入错误控置,仅适用于你上面的那些数字。
未考虑环境变量的溢出,只考虑你上面的几行数值或再多一点。

在DOS提示符下,如果键入  SET debug=on
则执行这个批处理的时候,就相当于调试状态,每一步过程你都可以看到,
而无需再修改这个文件的 echo on/off 的状态了。
@echo %debug% off
setlocal enabledelayedexpansion
set line=0 && del rr.txt 2>nul

for /F %%i in (re.txt)                do ( set /a line+=1  &&  set "num!line!=%%i" )
for /L %%i in (!line!,-1,1)        do ( echo !num%%i!  >> rr.txt )
start rr.txt
后又生成了1万行的随机数文件做为测试,没有溢出,运行正常:)

但是,处理1万行的倒序约用时间为:39-40秒左右。
测试环境:Microsoft Windows XP [版本 5.1.2600]
主机速度:CPU 1.73GHz

[ Last edited by redtek on 2006-10-16 at 09:30 ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-16 08:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 5 楼』:  

Re h2o:
    如果有多个疑问,建议在搜索没有类似主题的情况下,就每个疑问单独发一贴,这样便于搜索.
关于顶楼的问题:
@echo off
setlocal ENABLEDELAYEDEXPANSION
    set filename=mp3.vbs
    for /f "delims=: tokens=1,*" %%i in ('findstr /n . %filename%') do set %%i=%%j & set num=%%i
    for /l %%x in (%num%,-1,1) do for /f "delims=" %%y in ("!%%x! ") do echo.%%y
pause
注意:
1.此方法将受cmd变量个数的局限,如果处理太大的文件可能出现错误.如果用for "skip..." (findstr /n .)的方法则效率会非常低下.所以如果文件比较大的话可以尝试用vbs来实现.
2.为了代码的简洁性以及不忽略空白行,在每一行末尾会多一个空格出来.如果删除最后那个for语句中的("!%%x! ")中的空格,则不会在每行末尾加空格,同时也会自动删除文件中的空白行。
3.仿佛记得论坛就这个主题有过类似讨论,建议搜索一下。

关于生成随机字符的问题:
@echo off
setlocal ENABLEDELAYEDEXPANSION
    set str=0123456789abcdef
:start
    set /a num2+=1
    set /a num1=%random:~-1%
    set str=!str:~%num1%!!str:~0,%num1%!
    set str=%str: =%
    set var=%var%%str:~0,1%
    if %num2% gtr 111 goto next
goto :start

:next
    echo %var%
pause
为了便于理解,采用goto循环的结构.

   此帖被 +1 点积分     点击查看详情   
评分人:【 redtek 分数: +1  时间:2006-10-16 10:42


2006-10-16 08:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 6 楼』:  

关于倒序显示文件内容, 请测试...
@echo off
set num=0
setlocal enabledelayedexpansion
for /f "tokens=*" %%c in (re.txt) do (
    if !num!==0 set one=%%c
    set /a num+=1
)
set /a num=%num%-1
:go
if %num%==0 goto end
for /f "tokens=* skip=%num%" %%i in (re.txt) do (
    echo %%i
    set /a num-=1
    goto go
)
:end
echo %one%
pause
[ Last edited by pengfei on 2006-10-16 at 09:17 ]

2006-10-16 09:00
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 7 楼』:  

哈哈~ 4楼兄弟代码强.

3742668版主的生成随机数很爽...

[ Last edited by pengfei on 2006-10-16 at 09:43 ]

2006-10-16 09:12
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 8 楼』:  

6F的脚本处理起包含空行的内容时会有教大的Bug,如果专门为空行和特殊字符去进行处理的话那么效率会较低.

2006-10-16 09:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 9 楼』:  

是啊, 还是4楼的厉害.

2006-10-16 09:27
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 10 楼』:  

原来4楼采用递增的变量来存储每一行内容, 再通过递减达到重新排序, 厉害...

2006-10-16 09:48
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
h2o
初级用户





积分 44
发帖 18
注册 2006-10-9
状态 离线
『第 11 楼』:  

to lxmxn 朋友,
谢谢你的关注 ^-^
-------------------------------
to redtek 朋友,
谢谢 redtek,你帮忙写的代码刚测试过了 实现了
谢谢你
---------------------------------
to 3742668 版主 朋友,
Re h2o:
“如果有多个疑问,建议在搜索没有类似主题的情况下,就每个疑问单独发一贴,这样便于搜索.”

呵呵 好抱歉啊 我没留意这个 下次一定改正,
这个我是在论坛里搜索"倒序" 还有 "顺序" 不过,运气都不太好 :(

你帮忙写的 倒序 和 随机 代码都测试过了 实现了
谢谢你
---------------------------------
to pengfei 朋友,
谢谢 redtek,你帮忙写的代码刚测试过了 实现了
谢谢你
---------------------------------

=====================================================================

天啊!我太感动了
困扰了几天的问题,现在终于…
我会慢慢研究的 争取以后不给大家添麻烦

最后 还要谢谢大家 谢谢关注的朋友 谢谢楼上所有热心帮助的朋友
占用了你们的时间 这边给你们作揖了

2006-10-16 10:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by 3742668 at 2006-10-16 08:59:
Re h2o:
  ……
    2.为了代码的简洁性以及不忽略空白行,在每一行末尾会多一个空格出来.如果删除最后那个for语句中的("!%%x! ")中的空格,则不会在每行末尾加空格,同时也会自动删除文件中的空白行。
  ...

  每行末尾的空格是可以删掉的,并且不会影响空白行的显示,做法是:把最后一个 do 的语句改为 set var=%%y&&echo. !var:~0,-2! 即可。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-16 11:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 13 楼』:  

我也来个随机数:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set a=0123456789abcdef
set c=16
:a
set/a n+=1
set/a b=%RANDOM%%%c%
set jg=%jg%!a:~%b%,1!
if not %n%==111 goto a
echo %jg%
pause




我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-16 21:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 14 楼』:  

除了随机数产生乱序数字外, 还有其他办法吗?

2006-10-16 21:41
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 15 楼』:  

如果不用随机数产生乱序数字那就这样产生固定规律的数!



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-16 21:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: