中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求教:怎样把由 RANDOM 获得的随机数值写入文件
作者:
标题: 求教:怎样把由 RANDOM 获得的随机数值写入文件 上一主题 | 下一主题
falcon
新手上路





积分 10
发帖 3
注册 2006-5-8
来自 陕西西安
状态 离线
『楼 主』:  求教:怎样把由 RANDOM 获得的随机数值写入文件

怎样把由 RANDOM 获得的随机数值写入文件指定位置

[ Last edited by falcon on 2006-5-8 at 14:08 ]

2006-5-8 13:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 2 楼』:  

这个要看你要写入什么样的文件中去了,有些不明确,应该详细点,例如,写在哪几行,有没有固定位置,总之,这个问题我是没法回答你

2006-5-8 16:52
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





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

纯粹地用批处理来完成的话效率以及容错都不是很理想。
简要地说一下步骤:
    先用for /f "tokens=1,2* delims=:" %%i in ('"findstr /n . file.txt"') do set %%i=%%j & set num=%%i把文件内容全部保存到以行数为名的变量中,并把行的总数保存到变量num中。
    然后根据要求修改指定行的内容。可以用set var=%var:~0,修改内容之前的字符数%%random%%后面的内容%
  最后,用for读取源文本内容并计数,到被替换行的上一行退出for,然后用echo把替换后的行写到新文件中,再用for的skip参数跳过替换行后把剩下的内容追加到新文件中。

2006-5-8 21:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
falcon
新手上路





积分 10
发帖 3
注册 2006-5-8
来自 陕西西安
状态 离线
『第 4 楼』:  

我写的内容:
@echo off
random 1 255


echo IP=192.168.0.%random%> Wattcp.cfg
echo NETMASK=255.255.255.0>> Wattcp.cfg
echo GATEWAY=192.168.0.1>> Wattcp.cfg

set random=

end


我想把得到的数写入Wattcp.cfg的指定位置 可以实现吗?

三楼的内容 我试了 但是不是很理想 可能我的语法有问题吧?

[ Last edited by falcon on 2006-5-9 at 10:33 ]

2006-5-9 10:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





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

为什么不尝试用vbs来操作呢?
vbs相对来说效率应该好得多,bat在处理特殊字符的时候会有点力不从心。
你可以参考一下这个贴子,你要求的功能应该和里面的差不多,里面的批处理脚本和vbs脚本你稍做修改就可以实现你的要求了。

2006-5-9 12:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 6 楼』:  

::第一种情况,顺序的写入,每段中间有空行。

@echo off
for /l %%i in (1,1,255) do (
echo IP=192.168.0.%%i>>Wattcp.cfg
echo NETMASK=255.255.255.0>>Wattcp.cfg
echo GATEWAY=192.168.0.1>>Wattcp.cfg
echo.>>Wattcp.cfg
)


::第二种情况,随机数写入,因为你是以IP地址为基础,不可能有192.168.1.263563 这样的IP地址吧,所以也只能将就用下面的来实现随机了
@echo off
setlocal
echo.>Wattcp.cfg
:B
set /a p+=1
if p==5 goto :eof
set ii=%random:~0,3%
if %ii% leq 255 (
for /f "tokens=1,2* delims==" %%i in ('findstr /x "IP=192.168.0.%ii%" Wattcp.cfg') do set uu=%%j
if "%uu%"=="192.168.0.%ii%" goto A
echo IP=192.168.0.%ii%>>Wattcp.cfg
echo NETMASK=255.255.255.0>>Wattcp.cfg
echo GATEWAY=192.168.0.1>>Wattcp.cfg
echo.>>Wattcp.cfg
) else (
goto A
)

:A

set i=%random:~0,2%
set k=%random:~0,1%

for /f "tokens=1,2* delims==" %%i in ('findstr /x "IP=192.168.0.%i%" Wattcp.cfg') do set uu=%%j
if "%uu%"=="192.168.0.%i%" goto B
echo IP=192.168.0.%i%>>Wattcp.cfg
echo NETMASK=255.255.255.0>>Wattcp.cfg
echo GATEWAY=192.168.0.1>>Wattcp.cfg
echo.>>Wattcp.cfg
for /f "tokens=1,2* delims==" %%i in ('findstr /x "IP=192.168.0.%k%" Wattcp.cfg') do set uu=%%j
if "%uu%"=="192.168.0.%k%" goto B
echo IP=192.168.0.%k%>>Wattcp.cfg
echo NETMASK=255.255.255.0>>Wattcp.cfg
echo GATEWAY=192.168.0.1>>Wattcp.cfg
echo.>>Wattcp.cfg

goto B



批处理我也只能给你写成这个样子了.................

2006-5-9 15:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 7 楼』:  

Re falcon:

      你的问题描述仍然不清晰,我无法断定你的“指定位置”究竟是如何指定的?如果是行号+列号或者行号+特征串的指定可以参考3楼的算法,如果是特征行的指定可以借鉴6楼的方案。

      另外,请注明你的使用环境,是MSDOS,Win98命令行或者WinXP命令行?

Re bagpipe:

      感觉你的第二方案过于复杂了,可能是因为对随机IP的区分处理造成的。在CMD下取1~255的随机IP可以使用下面的代码:
set /a rnd=%random% %% 255 + 1
已根据bagpipe兄在10楼的指正意见进行修改

[ Last edited by willsort on 2006-5-11 at 16:06 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-5-9 17:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
falcon
新手上路





积分 10
发帖 3
注册 2006-5-8
来自 陕西西安
状态 离线
『第 8 楼』:  

感谢各位 获易非浅 受教了受教了

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

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 9 楼』:  

是啊,willsort兄要是早来我就不用这么费劲了,有些复杂了而且过于烦琐,受益匪浅....    谢WILLSORT兄指点迷津....

2006-5-10 08:45
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 10 楼』:  

呵呵,兄好像差了一个/A 的参数,判断重复性我觉得用findstr就可以了

2006-5-10 08:57
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: