标题: [文本处理] 批处理怎样修改配置文件ini中的参数为随机数值? [打印本页]
作者: mm123321 时间: 2018-12-15 17:16 标题: 批处理怎样修改配置文件ini中的参数为随机数值?
假设C盘下面【Settings.ini】文件,文件内容如下:
[Settings]
X=974
Y=438
PicPath=111.png
TrayIcon=0
每运行一下bat将 974 和 438 修改为随机数值,数值的范围为:100到1024 直接。
谢大神!!!!
作者: heyoug 时间: 2018-12-15 23:08
本帖最后由 heyoug 于 2018-12-15 23:13 编辑
@echo off
set /A LS=%RANDOM%%%1025
if %LS% LSS 100 set /A LS=%LS%+100
set /A LA=%RANDOM%%%1025
if %LA% LSS 100 set /A LA=%LA%+100
echo [Settings]>c:\Settings.ini
echo X=%LS%>>c:\Settings.ini
echo.>>c:\Settings.ini
echo Y=%LA%>>c:\Settings.ini
echo.>>c:\Settings.ini
echo PicPath=111.png>>c:\Settings.ini
echo.>>c:\Settings.ini
echo TrayIcon=^0>>c:\Settings.ini
作者: heyoug 时间: 2018-12-15 23:09
本帖最后由 heyoug 于 2018-12-15 23:14 编辑
不确定是否严谨
作者: codegay 时间: 2018-12-15 23:19
本帖最后由 codegay 于 2018-12-16 01:01 编辑
Nim 语言写的。- import os, parsecfg, random
- randomize()
-
- var inipath = getAppDir() / "Settings.ini"
- var ini = loadConfig inipath
-
- var x = rand(100..1024)
- var y = rand(100..1024)
-
- ini.setSectionKey("Settings", "X", $x)
- ini.setSectionKey("Settings", "Y", $y)
-
- ini.writeConfig(inipath)
复制代码
nim代码写起来挺简洁,但是parsecfg有坑,比如不保持原配置文件的空行和回车换行格式,会使用unix换行风格保存文件。
作者: jiavip 时间: 2018-12-16 00:18
回复 2# heyoug
我写的随机数没你那么复杂,,,看我的写法,,- @ECHO OFF
- :RUN
- SET LS=%RANDOM%
- IF %LS% LSS 100 GOTO RUN
- IF %LS% GTR 1024 GOTO RUN
- ECHO 这里就是你想要的100~1024随机数。。。。 【 %LS% 】
- PAUSE>NUL
- GOTO RUN
复制代码
作者: Batcher 时间: 2018-12-16 11:40
回复 5# jiavip
算法的好坏跟代码的长短没有必然的联系。推荐参考一下别的的思路:
批处理产生四个四位不重复的随机数
http://bbs.bathome.net/thread-470-1-1.html
怎么理解批处理产生不重复的随机数的思路?
http://bbs.bathome.net/thread-12260-1-1.html
批处理随机输出数字1~100不重复
http://bbs.bathome.net/thread-3733-1-1.html
批处理 互不相同随机数生成
http://bbs.bathome.net/thread-28168-1-1.html
批处理如何产生100-200之间不重复的的随机数?
http://bbs.bathome.net/thread-9702-1-1.html
批处理生成100个不重复的随机数
http://bbs.bathome.net/thread-568-1-1.html
批处理如何产生一个100-200 之间的随机数?
http://bbs.bathome.net/thread-468-1-1.html
作者: 523066680 时间: 2018-12-16 14:17
sed之类的是不是可以一句话解决?
Perl是这样的- use File::Slurp;
- my $s = read_file("Setttings.ini");
- $s=~s/(974|438)/int(rand(1024-100+1)+100)/eg;
- write_file("Setttings.ini.txt", $s);
复制代码
作者: tigerpower 时间: 2018-12-16 17:43
本帖最后由 tigerpower 于 2018-12-16 21:08 编辑
- perl -i -pe "s/\d+/int(rand(925))+100/e if /^[XY]=/" settings.ini
复制代码
作者: flashercs 时间: 2018-12-16 18:02
这样 会不会把非[settings]section下的字段x,y也改了?
比如- [Settings]
- X=974
-
- Y=438
-
- PicPath=111.png
-
- TrayIcon=0
- [config]
- X=-1
- Y=3
复制代码
作者: 523066680 时间: 2018-12-16 18:11
本帖最后由 523066680 于 2018-12-16 20:30 编辑
回复 9# flashercs
既然题主已经限定了文件内容,那我们就根据实际情况而解吧。
11楼已经把行号硬编码处理了 ……
作者: tigerpower 时间: 2018-12-16 20:11
本帖最后由 tigerpower 于 2018-12-16 21:09 编辑
回复 9# flashercs
- perl -i -pe "s/\d+/int(rand(925))+100/e if $.=~/^[24]$/" settings.ini
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |