|
414893029
初级用户
 
积分 45
发帖 23
注册 2007-10-29
状态 离线
|
『楼 主』:
[在线求助] 关于FOR提取TXT文本随即行
不好意思...虽然我一直潜水..但是仍然很菜..
规矩懂的...搜索已经找不到我想要的了..所以才开此贴
事情是这样的...我是一个网吧管理员.
刚装了流星蝴蝶剑 ... 因为需要序列号...我整了个注册表写入...
可是...一联网就出现序列号相同...
恩..
我试着写了个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
[HKEY_LOCAL_MACHINE\Software\InterServ\Meteor]
"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 ]
|
|
2008-4-10 10:46 |
|
|
terse
银牌会员
    
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
2 楼』:
这个意思?
@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
|

简单!简单!再简单! |
|
2008-4-10 11:16 |
|
|
414893029
初级用户
 
积分 45
发帖 23
注册 2007-10-29
状态 离线
|
『第
3 楼』:
不好意思...我真的看的不明白....
但...我的意思写的很清楚了..就是从那么多的CDK中随即拿一个写入注册表
|
|
2008-4-10 11:19 |
|
|
slore
铂金会员
      
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
4 楼』:
随机生成一个然后skip掉这么多行,读取一行……
|
|
2008-4-10 11:22 |
|
|
414893029
初级用户
 
积分 45
发帖 23
注册 2007-10-29
状态 离线
|
『第
5 楼』:
谢谢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
|
|
2008-4-10 11:29 |
|
|
gao123
新手上路

积分 12
发帖 6
注册 2008-2-21
状态 离线
|
|
2008-4-10 13:37 |
|
|
gao123
新手上路

积分 12
发帖 6
注册 2008-2-21
状态 离线
|
|
2008-4-10 13:38 |
|
|
414893029
初级用户
 
积分 45
发帖 23
注册 2007-10-29
状态 离线
|
『第
8 楼』:
其实我还不是很懂....希望有人能好心细节讲下
|
|
2008-4-10 17:04 |
|
|
abcd
银牌会员
    
积分 1436
发帖 739
注册 2007-10-11
状态 离线
|
『第
9 楼』:
set/a n=%random%%%11+1
中的,%random%%%11会产生一个0到10 的随机数。+1就产生一个1到11的随机数。
余下的就是从文件中取出同随机数相同的行。
|
|
2008-4-10 17:14 |
|
|
bat-zw
金牌会员
      永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
10 楼』:
我来解释下:
Quote: | @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 |
|
2008-4-10 17:27 |
|