中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 03:23
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [在线求助] 关于FOR提取TXT文本随即行 查看 918 回复 9
楼 主 [在线求助] 关于FOR提取TXT文本随即行 发表于 2008-04-10 10:46 ·  中国 上海 杨浦区 电信
初级用户
积分 45
发帖 23
注册 2007-10-29 10:36
18年会员
UID 101072
性别 男
状态 离线
不好意思...虽然我一直潜水..但是仍然很菜..

规矩懂的...搜索已经找不到我想要的了..所以才开此贴

事情是这样的...我是一个网吧管理员.

刚装了流星蝴蝶剑 ... 因为需要序列号...我整了个注册表写入...

可是...一联网就出现序列号相同...

恩..

我试着写了个P

@echo off
regedit /s G:\Meteor\流星蝴蝶剑.reg

........
........
reg add "HKEY_LOCAL_MACHINE\Software\InterServ\Meteor" /v Serial /t reg_sz /d %random% /f
start G:\Meteor\Meteor.exe

=======================
流星蝴蝶剑.reg

REGEDIT4


"Path"="G:\\Meteor"
"Exe"="G:\\Meteor\\meteor.exe"
"Serial"="d32c1542240dc7"
"Uninstall"="RunDll32 C:\\PROGRA~1\\COMMON~1\\INSTAL~1\\ENGINE\\6\\INTEL3~1\\Ctor.dll,LaunchSetup \"C:\\Program Files\\InstallShield Installation Information\\{4AB3FF26-7194-49B8-8E3F-C12890B3894C}\\SETUP.EXE\" -l0x804 "


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

然后..问题出现了P中的%random%是指我的一个名为CDK.TXT的文件
======================
CDK.TXT

d32c1542240dc7
f0a03ce05646f4
95d918e3d1ef61
19654494997df4
c3bd21990b3182
72d1e4a2c9c57b
e831d060c0b8a9
43e4a0bb1b4842
abca5be7b61c56
1c7fc8cbc22a2f
862cf5bd2fce26
=======================

小弟水平有限..关于随即变量真的搞不透彻...

现在我想让%random%取代CDK.TXT随即一行

完成上文的P


还望各位兄台耐心帮小弟一忙

[ Last edited by 414893029 on 2008-4-10 at 10:48 AM ]
2 发表于 2008-04-10 11:16 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
这个意思?

@echo off&setlocal enabledelayedexpansion
set/a n=%random%%%11+1
for /f "delims=" %%i in (CDK.TXT) do (
set /a m+=1
if !m! equ %n% set "str=%%i"
)
echo %str%
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
414893029 +2 2008-04-10 11:29
简单!简单!再简单!
3 发表于 2008-04-10 11:19 ·  中国 上海 杨浦区 电信
初级用户
积分 45
发帖 23
注册 2007-10-29 10:36
18年会员
UID 101072
性别 男
状态 离线
不好意思...我真的看的不明白....

但...我的意思写的很清楚了..就是从那么多的CDK中随即拿一个写入注册表
4 发表于 2008-04-10 11:22 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
随机生成一个然后skip掉这么多行,读取一行……
5 发表于 2008-04-10 11:29 ·  中国 上海 杨浦区 电信
初级用户
积分 45
发帖 23
注册 2007-10-29 10:36
18年会员
UID 101072
性别 男
状态 离线
谢谢2楼terse兄...已经可以完成我的P了..
@echo off&setlocal enabledelayedexpansion
regedit /s G:\Meteor\流星蝴蝶剑.reg
set/a n=%random%%%11+1
for /f "delims=" %%i in (CDK.TXT) do (
set /a m+=1
if !m! equ %n% set "str=%%i"
)
echo %str%
reg add "HKEY_LOCAL_MACHINE\Software\InterServ\Meteor" /v Serial /t reg_sz /d %str% /f
start G:\Meteor\Meteor.exe
6 bucuo 发表于 2008-04-10 13:37 ·  日本
新手上路
积分 12
发帖 6
注册 2008-02-21 22:25
18年会员
UID 111169
性别 男
状态 离线
bu cuo
7 不错 发表于 2008-04-10 13:38 ·  日本
新手上路
积分 12
发帖 6
注册 2008-02-21 22:25
18年会员
UID 111169
性别 男
状态 离线
学习了
8 发表于 2008-04-10 17:04 ·  中国 上海 杨浦区 电信
初级用户
积分 45
发帖 23
注册 2007-10-29 10:36
18年会员
UID 101072
性别 男
状态 离线
其实我还不是很懂....希望有人能好心细节讲下
9 发表于 2008-04-10 17:14 ·  中国 北京 华为云
银牌会员
★★★
积分 1,436
发帖 739
注册 2007-10-11 17:44
18年会员
UID 99469
性别 男
状态 离线
set/a n=%random%%%11+1

中的,%random%%%11会产生一个0到10 的随机数。+1就产生一个1到11的随机数。

余下的就是从文件中取出同随机数相同的行。
10 我来解释下: 发表于 2008-04-10 17:27 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
@echo off&setlocal enabledelayedexpansion
set/a n=%random%%%11+1
for /f "delims=" %%i in (CDK.TXT) do (
set /a m+=1
if !m! equ %n% set "str=%%i"
)
echo %str%
pause

应楼主的意思逐句解释如下:
@echo off&setlocal enabledelayedexpansion关闭所有回显(包括echo本身),然后开启变量延迟,注意开启变量延迟是为了后面变量m的逐步赋值做准备。
set/a n=%random%%%11+1取得1-11间的随机数值(因cdk.txt的行数为1-11行),注意set/a n=%random%%%11取得的随机数值是0-10之间的,后面的+1则是把前面的值取到1-11间。
for /f "delims=" %%i in (CDK.TXT) do ( set /a m+=1 if !m! equ %n% set "str=%%i")是运用for命令对cdk.txt中所有行进行比对,比对一行给变量m的赋值加1,当m值累加到前面取到的n值大小时就将刚刚比对完的行赋值给变量str,也就是随机取cdk.txt中一行赋值给str,注意在这里%m%必须写成!m!不然m值将永远为空。
也就粗略地解释到此吧,希望能给楼主以帮助。
批处理之家新域名:www.bathome.net
论坛跳转: