[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样修改配置文件ini中的参数为随机数值?

假设C盘下面【Settings.ini】文件,文件内容如下:

[Settings]
X=974

Y=438

PicPath=111.png

TrayIcon=0



每运行一下bat将 974 和 438 修改为随机数值,数值的范围为:100到1024 直接。

谢大神!!!!

本帖最后由 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

TOP

本帖最后由 heyoug 于 2018-12-15 23:14 编辑

不确定是否严谨

TOP

本帖最后由 codegay 于 2018-12-16 01:01 编辑

Nim 语言写的。
  1. import os, parsecfg, random
  2. randomize()
  3. var inipath = getAppDir() / "Settings.ini"
  4. var ini = loadConfig inipath
  5. var x = rand(100..1024)
  6. var y = rand(100..1024)
  7. ini.setSectionKey("Settings", "X", $x)
  8. ini.setSectionKey("Settings", "Y", $y)
  9. ini.writeConfig(inipath)
复制代码
nim代码写起来挺简洁,但是parsecfg有坑,比如不保持原配置文件的空行和回车换行格式,会使用unix换行风格保存文件。
1

评分人数

去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 2# heyoug

我写的随机数没你那么复杂,,,看我的写法,,
  1. @ECHO OFF
  2. :RUN
  3. SET LS=%RANDOM%
  4. IF %LS% LSS 100 GOTO RUN
  5. IF %LS% GTR 1024 GOTO RUN
  6. ECHO 这里就是你想要的100~1024随机数。。。。 【 %LS% 】
  7. PAUSE>NUL
  8. GOTO RUN
复制代码

TOP

回复 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
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

sed之类的是不是可以一句话解决?

Perl是这样的
  1. use File::Slurp;
  2. my $s = read_file("Setttings.ini");
  3. $s=~s/(974|438)/int(rand(1024-100+1)+100)/eg;
  4. write_file("Setttings.ini.txt", $s);
复制代码

TOP

本帖最后由 tigerpower 于 2018-12-16 21:08 编辑
  1. perl -i -pe "s/\d+/int(rand(925))+100/e if /^[XY]=/" settings.ini
复制代码
1

评分人数

TOP

这样 会不会把非[settings]section下的字段x,y也改了?
比如
  1. [Settings]
  2. X=974
  3. Y=438
  4. PicPath=111.png
  5. TrayIcon=0
  6. [config]
  7. X=-1
  8. Y=3
复制代码

TOP

本帖最后由 523066680 于 2018-12-16 20:30 编辑

回复 9# flashercs

    既然题主已经限定了文件内容,那我们就根据实际情况而解吧。
11楼已经把行号硬编码处理了 ……

TOP

本帖最后由 tigerpower 于 2018-12-16 21:09 编辑

回复 9# flashercs

  1. perl -i -pe "s/\d+/int(rand(925))+100/e if $.=~/^[24]$/" settings.ini
复制代码

TOP

返回列表