. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,489 声望值: 2
精华: 38,解答: 6
#1 旧 2005-05-23, 10:03:29 默认 【原创】cmd下 文本行乱序排列并分组
hitme 当前离线  

=============================================
述求:有一个party,达到对到场人员,随机分组玩团队游戏的目的。。。
能够随意的输入姓名,输入完后,把随机分组排列的姓名显示在屏幕上
=============================================
设姓名文本为name.txt,一个名字一行
分组规则为:4人一组
思路为:乱编号+编号排序=乱序,然后分组
随机空间大小为10的3次方,几十人的party应该够了吧

准备好name.txt,保存为xy.cmd运行,自定义修改红色部分
代码:
@echo off

for /f "delims=" %%i in (name.txt) do (

			setlocal ENABLEDELAYEDEXPANSION
			for /l %%a in (1,1,3) do (
			         echo %random% >nul
			         set  m=!m!!random:~-1!
			          )
			echo !m!!:%%i>>tmp.txt
			endlocal
)


setlocal ENABLEDELAYEDEXPANSION

set /a num=0
set /a linenum=0
for /f "delims=" %%i in (tmp.txt) do set /a linenum=!linenum!+1

for /f "tokens=1,2* delims=: " %%i in ('sort tmp.txt ^| findstr /n "."') do (
		set n=%%k
		set m=!m!	!n!
		set /a num=!num!+1

		if !num!==4 (
			echo !m!>>tmp1.txt 
			set /a num=0
			set m=) 

		if "%%i"=="!linenum!" (
					if "!m!" neq "" echo !m!>>tmp1.txt)
)

endlocal

findstr /n "." tmp1.txt>list.txt
del tmp*.txt

start list.txt
上传的附件
文件类型: rar xy.rar (589 字节, 14 次查看)

此帖于 2005-05-23 15:01:47 被 hitme 编辑. .
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,489 声望值: 2
精华: 38,解答: 6
#2 旧 2005-05-23, 12:37:19 默认
hitme 当前离线  

修正了几个小问题,更新下
Hackevin
 
Hackevin 的头像
核心会员
 
资 料:
注册日期: Feb 2002
帖子: 4,027 声望值: 4
精华: 0,解答: 4
#3 旧 2005-05-23, 13:31:51 默认
Hackevin 当前离线  

http://bbs.et8.net/bbs/showthread.php?t=661402

注释一下这个摇号的吧,想改个30选7都不知道从哪儿下手
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,489 声望值: 2
精华: 38,解答: 6
#4 旧 2005-05-23, 14:04:43 默认
hitme 当前离线  

引用:
作者: Hackevin
http://bbs.et8.net/bbs/showthread.php?t=661402

注释一下这个摇号的吧,想改个30选7都不知道从哪儿下手
改下这里,改为:
代码:
findstr /m "!m%%i!!n%%i!" tmp.txt 2>nul >nul && goto :loop || ^
if !m%%i!!n%%i!==00 (
                                   echo 30>>tmp.txt) else (
                                                                          echo !m%%i!!n%%i!>>tmp.txt)
思路是如随机到00,输出30
用cmd写,螺丝壳里做道场,憋的慌..要求高了,越改越不靠铺,呵呵

此帖于 2005-05-24 08:16:43 被 hitme 编辑. .
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,489 声望值: 2
精华: 38,解答: 6
#5 旧 2005-05-23, 14:06:48 默认
hitme 当前离线  

引用:
作者: Hackevin
http://bbs.et8.net/bbs/showthread.php?t=661402

注释一下这个摇号的吧,想改个30选7都不知道从哪儿下手
思路是:
分别随机出[01-29]十位,和个位
00的不要
重复的不要
排序,转置
Punk
 
Punk 的头像
热心会员
 
资 料:
注册日期: Jan 2001
帖子: 2,929 声望值: 13
精华: 6,解答: 91
#6 旧 2005-05-23, 14:15:39 默认
Punk 当前离线  

请教hitme另外一个脚本,功能是自动拨号,ping指定IP地址(参数1),小于指定ping值(参数2)就停止(拨号成功),大于的话挂断重拨,直到小于指定ping.有几步不会弄....需要的功能是:

引用:
rasphone -d 拨号
ping 指定IP
获取ping值,默认命令是ping四次(不麻烦的话希望可以指定ping次数作为参数3),取平均值或者最小值与指定ping值比较
if =< 指定ping值 goto :end (结束,拨号成功)
if > 指定ping值
rasphone -h 拨号 (不成功就挂断)
重复以上


~~
"说好了我是卖艺不卖身的哦."
"靠,那我玩完了不给钱你就不叫卖了!"
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,489 声望值: 2
精华: 38,解答: 6
#7 旧 2005-05-23, 14:30:41 默认
hitme 当前离线  

引用:
作者: Punk
请教hitme另外一个脚本,功能是自动拨号,ping指定IP地址(参数1),小于指定ping值(参数2)就停止(拨号成功),大于的话挂断重拨,直到小于指定ping.有几步不会弄....需要的功能是:
大概如此
地址=bbs.et8.net
次数=3
ping值限=1000 比较对象=平均值

代码:
:loop
rasphone -d 拨号
for /f "tokens=3 delims=," %%i in ('ping bbs.et8.net -n 3 ^| findstr "Average"') do (
			setlocal ENABLEDELAYEDEXPANSION
			set n=%%i
			if !n:~11,-3! gtr 1000 (rasphone -h 拨号 (不成功就挂断) && goto :loop) 								endlocal
)
完善好了,共享哈
呵呵,挑起局端设备来了..
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,489 声望值: 2
精华: 38,解答: 6
#8 旧 2005-05-23, 14:46:44 默认
hitme 当前离线  

我把以前写的cmd shell,rar打包了下,各处备了下,留了好几个copy
不曾想..今天发现... rar文件坏了,妈呀...太损了吧
算了算了,旧的不去,新的不来
Punk
 
Punk 的头像
热心会员
 
资 料:
注册日期: Jan 2001
帖子: 2,929 声望值: 13
精华: 6,解答: 91
#9 旧 2005-05-23, 15:33:58 默认
Punk 当前离线  

有点问题:
引用:
此时不应有 -3!。

F:\Tmp> if !n:~11,-3! gtr 5 @echo to high
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,489 声望值: 2
精华: 38,解答: 6
#10 旧 2005-05-23, 15:43:23 默认
hitme 当前离线  

引用:
作者: Punk
有点问题:
恩,!用习惯了,还忘了"号
改正
"%n:~11,-3%" gtr "1000"
Punk
 
Punk 的头像
热心会员
 
资 料:
注册日期: Jan 2001
帖子: 2,929 声望值: 13
精华: 6,解答: 91
#11 旧 2005-05-23, 16:05:18 默认
Punk 当前离线  

好像传递不了变量,你看看:

引用:
for /f "tokens=3 delims=," %%i in ('ping bbs.et8.net -n 3 ^| findstr "Average"') do (
setlocal ENABLEDELAYEDEXPANSION
set n=%%i
set m=%n:~11,-3%
@echo %m

endlocal
)
输出的m值始终是个m而不是数字,set m==%n:~11,-3%和m="=%n:~11,-3%
"都不行...

此帖于 2005-05-23 16:12:38 被 Punk 编辑. .
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,489 声望值: 2
精华: 38,解答: 6
#12 旧 2005-05-23, 16:11:47 默认
hitme 当前离线  

引用:
作者: Punk
好像传递不了变量,你看看:



输出的m值始终是个m而不是数字,set m==%n:~11,-3%和m="=%n:~11,-3%
"都不行...


要这样用
set m=%n:~11,-3%
echo !m!
Punk
 
Punk 的头像
热心会员
 
资 料:
注册日期: Jan 2001
帖子: 2,929 声望值: 13
精华: 6,解答: 91
#13 旧 2005-05-23, 16:17:45 默认
Punk 当前离线  

for /f "tokens=3 delims=," %%i in ('ping bbs.et8.net -n 3 ^| findstr "Average"') do (
setlocal ENABLEDELAYEDEXPANSION
set n=%%i
set m=%n:~11,-3%
@echo !m!
endlocal
)

输出空的...
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,489 声望值: 2
精华: 38,解答: 6
#14 旧 2005-05-23, 16:23:45 默认
hitme 当前离线  

引用:
作者: Punk
for /f "tokens=3 delims=," %%i in ('ping bbs.et8.net -n 3 ^| findstr "Average"') do (
setlocal ENABLEDELAYEDEXPANSION
set n=%%i
set m=%n:~11,-3%
@echo !m!
endlocal
)

输出空的...
晕了,晕了,今天下午彻底晕了,新装了个xp,打全补丁,不能做文件共享,不知道那里的策略给改了,头疼了
代码:
for /f "tokens=3 delims=," %%i in ('ping bbs.et8.net -n 3 ^| findstr "Average"') do (
setlocal ENABLEDELAYEDEXPANSION
set n=%%i
set m=!n:~11,-3!
echo !m! 
endlocal
)
Punk
 
Punk 的头像
热心会员
 
资 料:
注册日期: Jan 2001
帖子: 2,929 声望值: 13
精华: 6,解答: 91
#15 旧 2005-05-23, 16:25:40 默认
Punk 当前离线  

是不是%%1那个变量值"Average = 8ms"含有等号有影响?
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 19:23:28.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号