|
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 |
|