中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-02 07:11
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助] - 随机读取指定文本的一行 查看 1,307 回复 8
楼 主 [求助] - 随机读取指定文本的一行 发表于 2006-10-18 04:33 ·  中国 广西 柳州 柳城县 电信
初级用户
积分 44
发帖 18
注册 2006-10-09 09:30
19年会员
UID 65057
状态 离线
……
:var1
for /f %%a in (cont.txt) do (
随机从 cont.txt 中读一行
)
……

for /f %%a in (a.txt) do (
echo %%a
call :var1
echo 上面这个 call :var1 读取到的 一行 内容

)
==================
请问,这个 "随机从 cont.txt 中读一行" 可以实现吗?

附:
a.txt
------------------
25651970
258849156
258849116
258849007
258848294
258848275
258848272
258848252
88848250
…… ( 约 百 行 )


cont.txt
-----------------
知否 知否,应是绿肥红瘦
月落乌蹄霜满天 江枫渔火对愁眠
转轴拨弦三两声 未成曲调先有情
春花秋月何时了
往事知多少
小楼昨夜又东风
银烛秋光冷画屏 轻罗小扇扑流萤
…… ( 约 200 行 )

============================
还想实现另外一个功能,就是 call :var2
call :var2 读取的就不是随机的 而是 a.txt 和 cont.txt 一行一行对应的,比如:

25651970
知否 知否,应是绿肥红瘦

258849156
月落乌蹄霜满天 江枫渔火对愁眠

258849116
转轴拨弦三两声 未成曲调先有情
……


==============
呵呵 真是不好意思 又来麻烦大家 :D
2 发表于 2006-10-18 04:53 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
19年会员
UID 60484
状态 离线
可以配合 %random% 、% 、 for /f "skip=" 、 goto 一起用。

PS: 我在想你的第一个文件有什么用处。

[ Last edited by NaturalJ0 on 2006-10-18 at 04:55 ]
3 发表于 2006-10-18 05:38 ·  中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
没有看明白楼主想做什么
4 发表于 2006-10-18 05:56 ·  中国 四川 成都 移动
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  建议:多用论坛里的搜索功能。

  先链接一个类似的讨论贴过来:一个关于随机获取文件名的问题.
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
5 发表于 2006-10-18 09:54 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
20年会员
UID 58987
来自 湖南.娄底
状态 离线
嘎嘎~ 楼主的提问真难理解. 以下是你要的两段代码:


::随机抽取cont中的一行, 显示在a.txt每一行的下面.

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%c in (a.txt) do (
echo %%c
call :var1
echo !ii!
)
pause
goto :eof

:var1
for /f "tokens=* skip=%random:~-2%" %%i in (cont.txt) do (
set ii=%%i
goto :eof
)



::a.txt与cont.txt中每一行准确对应, 显示的行数将以行数最少的一个文本为准.

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%c in (a.txt) do (
set /a num+=1
set num_=
for /f "tokens=*" %%i in (cont.txt) do (
set /a num_+=1
if "!num!"=="!num_!" (
echo %%c
echo %%i
)
)
)
pause


[ Last edited by pengfei on 2006-10-18 at 09:55 ]
6 发表于 2006-10-18 11:06 ·  中国 广西 柳州 柳城县 电信
初级用户
积分 44
发帖 18
注册 2006-10-09 09:30
19年会员
UID 65057
状态 离线
2 楼 NaturalJ0 ,
PS: 我在想你的第一个文件有什么用处。
---------
回 NaturalJ0 朋友,
哈哈哈 这个啊 第一个文件是一个记录的id的列表
我想实现对应一个 id,后面附加另一条记录(cont.txt 中的一行内容)
===============================

是我表达的的不够明白 呵呵

我补充一下,

概括点说呢,呃 就是运行代码 然后会从 cont.txt 这个多行的文本中 随机的读取一行(只要一行)的内容出来。
===============================
to namejm 版主,
我搜索了哦 那个文章我之前也有看了的 可是
里边的代码好多我都不能理解 不能将它们改装为己用,所以只好发个新贴子了

7 发表于 2006-10-18 11:11 ·  中国 广西 柳州 柳城县 电信
初级用户
积分 44
发帖 18
注册 2006-10-09 09:30
19年会员
UID 65057
状态 离线
啊?我刚刷新 哎呀 感动感动 谢谢 pengfei 朋友,太感动了


我测试一下先
8 发表于 2006-10-18 11:33 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线

@echo off
setlocal ENABLEDELAYEDEXPANSION
set file=a.txt
set file2=b.txt

:start
for /f "delims=: tokens=1,*" %%i in ('findstr /n . %file%') do set "%%i=%%j" && set num=%%i
set /a "col=%random% %% 100"
set /a col2 = %col% - 1
for /f "skip=%col2% delims=" %%i in (%file2%) do echo !%col%! && echo %%i && goto next

:next
pause

假设两个文件都只有100行。
功能1,2都整合在里面.
9 发表于 2006-10-18 12:54 ·  中国 浙江 杭州 电信
中级用户
★★
积分 305
发帖 85
注册 2005-05-23 00:00
21年会员
UID 39004
性别 男
状态 离线
虽然现在用不着,先收起来以后备用
论坛跳转: