找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28877|回复: 10

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

[复制链接]
发表于 2018-12-15 17:16:56 | 显示全部楼层 |阅读模式
假设C盘下面【Settings.ini】文件,文件内容如下:

[Settings]
X=974

Y=438

PicPath=111.png

TrayIcon=0



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

谢大神!!!!
发表于 2018-12-15 23:08:26 | 显示全部楼层
本帖最后由 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
发表于 2018-12-15 23:09:17 | 显示全部楼层
本帖最后由 heyoug 于 2018-12-15 23:14 编辑

不确定是否严谨
发表于 2018-12-15 23:19:58 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
happy886rr + 1 好久没给你加技了

查看全部评分

发表于 2018-12-16 00:18:21 | 显示全部楼层
回复 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
复制代码
发表于 2018-12-16 11:40:39 | 显示全部楼层
回复 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
发表于 2018-12-16 14:17:07 | 显示全部楼层
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);
复制代码
发表于 2018-12-16 17:43:53 | 显示全部楼层
本帖最后由 tigerpower 于 2018-12-16 21:08 编辑
  1. perl -i -pe "s/\d+/int(rand(925))+100/e if /^[XY]=/" settings.ini
复制代码

评分

参与人数 1PB +6 技术 +1 收起 理由
523066680 + 6 + 1 猜到你会出现

查看全部评分

发表于 2018-12-16 18:02:55 | 显示全部楼层
这样 会不会把非[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
复制代码
发表于 2018-12-16 18:11:56 | 显示全部楼层
本帖最后由 523066680 于 2018-12-16 20:30 编辑

回复 9# flashercs

    既然题主已经限定了文件内容,那我们就根据实际情况而解吧。
11楼已经把行号硬编码处理了 ……
发表于 2018-12-16 20:11:22 | 显示全部楼层
本帖最后由 tigerpower 于 2018-12-16 21:09 编辑

回复 9# flashercs

  1. perl -i -pe "s/\d+/int(rand(925))+100/e if $.=~/^[24]$/" settings.ini
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 23:06 , Processed in 0.020736 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表