Board logo

标题: 请教--如何不打开一个ini文件并修改其中参数值 [打印本页]

作者: hisean     时间: 2006-4-5 12:14    标题: 请教--如何不打开一个ini文件并修改其中参数值

有这样一个需求。
想通过命令行方式修改INI文件中某个参数的赋值,但不想通过notepad,edit等进行人为手工查找替换等操作。这个参数在该INI中名字唯一,但行数不是固定。
作者: 3742668     时间: 2006-4-5 13:24

@echo off
for /f "delims=: tokens=1,2" %%i in ('"findstr /n . 123.txt"') do set %%i=%%j & set col=%%i
for /f "delims=:" %%m in ('"findstr /n /c:"内容" 123.txt"') do  set num=%%m
set /a var = num - 1
for /l %%n in (1,1,%var%) do echo %%%%n%% | findstr . >>tmp.txt
echo %%%num%:内容=新内容%% | findstr . >>tmp.txt
set /a var = var + 2
for /l %%e in (%var%,1,%col%) do echo %%%%e%% | findstr . >>tmp.txt
自己看着改改,原理就这些了。
作者: hisean     时间: 2006-4-5 14:17
嘿嘿,谢谢大侠,不过还没有看懂,拿回去好好研究一下。
作者: Climbing     时间: 2006-4-5 18:04
如果不反对使用第三方工具,那么使用Horst的VarSet或者inifile这一类的工具更简单。
作者: Kinglion     时间: 2006-4-5 19:01
同意楼上的说法。
作者: 3742668     时间: 2006-4-5 20:51
等。。等,我要抬个......杠。
如果用第三方工具的话比如用vbs了,灵活简便,follow me...
if WScript.Arguments.Count <> 0 Then
        myFile = Wscript.Arguments(0)
else
    SET oFO = CreateObject("SAFRCFileDlg.FileOpen")
            oFO.OpenFileOpenDlg
            myFile = oFO.FileName
end if
        strOld = InputBox("输入要被替换的文字:")
     if Len(Trim(strOld)) = 0 then Wscript.Quit
        strNew = InputBox("输入被替换后的文字:")
     if Len(Trim(strNew)) = 0 then Wscript.Quit
       
with CreateObject("Scripting.FileSystemObject")
    SET FILE = .OpenTextFile(myFile,1,true)
            fStr = FILE.Readall
        FILE.Close
        fStr = Replace(fStr,strOld,strNew,1,1)
    SET FILE = .OpenTextFile(myFile,2,true)
        FILE.Write fStr
end with
保存为 修改ini文件.vbs  ,然后把要修改的文件直接拖放到它上面,然后按照提示来就行了,如果直接双击会打开对话框让你选择要修改的文件。
默认只替换一次,如果想替换多次的话可以自行修改倒数第四行的最后一个1为其他的数字。
似乎跑题了,这里是DOS论坛,我的同志们。
作者: willsort     时间: 2006-4-6 03:20
Re 3742668:

       杠需要两人抬,我也帮下忙吧

       首先,vbs可以由Windows自带的cscript提供支持,所以不能算“第三方”;其次,vbs是脚本语言,而“工具”只能是其支持程序,比如cscript;再次,修改ini并非字符串替换,因为通常我们是根据ini中的变量名而非变量值或者变量名+变量值来修改变量;最后,若要不跑DOS论坛的题,那么你的CMD脚本也该挂冠归隐了。

       另外,在没使用inifile和VarSet之前,在DOS下也曾编过类似的批处理代码,可惜现在找不到了,重写编写则没有太强的目的性。
作者: 3742668     时间: 2006-4-6 19:09
Re willsort:
既然是抬杠那我还是要继续。
首先,有鉴于本人在6楼可耻地出现的笔误,给willsort兄造成了错觉,认为我把vbs当作第三方工具了,其实我的原话应该是“如果用第三方工具的话不如用vbs了,灵活简便,follow me...”,请注意偏移量为10处的字为“不”,所以,willsort兄的第一杠无效。
其次,由于没有领会到楼主提问的精神,造成脚本目的性的错误,但是从另一个角度来看,只需要对我的俩脚本稍加改造就可实现要求,给予了楼主自己编写的机会。当然,如果有人说我的脚本可移植性强我也没有意见。
最后,挂冠归隐这个词让我觉得似乎不是在抬杠,再说了,CMD和DOS看起来也算是差不多,且是一母所生,算做是DOS也不是很牵强吧。
作者: Climbing     时间: 2006-4-6 21:01
两位都是抬杠的高手,我对两位的景仰之情同样都如滔滔江水,连绵不绝...
作者: DOSforever     时间: 2006-4-6 21:13


  Quote:
Originally posted by Climbing at 2006-4-6 21:01:
两位都是抬杠的高手,我对两位的景仰之情同样都如滔滔江水,连绵不绝...

哈哈哈哈哈……

虽然俺啥也没看懂,但小磕,你越来越可爱了。来,在让俺亲一个哈哈哈哈哈……
作者: willsort     时间: 2006-4-6 21:55
Re All:

      抬杠还是适可而止吧,正所谓“小抬怡情,大抬伤身”。因此,关于CMD与DOS的错综纠缠不再详述。

      需要提请各位注意的是,在此 ”DOS疑難解答 & 問題討論 (解答室)” 中,近期内涌现出大量讨论 WiindowsNT 命令脚本的主题帖,这固然可以长足促进 Windows NT 命令脚本的交流和发展,但由于类似园艺学中的顶端优势原理,其他类型的讨论主题必不可免的受到抑制性影响。从长远和大局来看,这对 CNDOS 论坛的发展是不利的。因此,建议更多用户,积极发表和回复其他类型的主题,全面促进论坛建设和发展。

      谢谢合作!
作者: Climbing     时间: 2006-4-7 13:59
到现在,纯DOS实在没有什么太多的新鲜话题可资讨论,你说呢,wil兄?

到目前为止,一涉及到纯DOS,基本上就是USB设备如何驱动?一个游戏该如何能玩?内存该怎么优化?要么就是串口读写之类的问题了。基本上,要么是无法解决,要么就是讨论了太多。

不谈cmd与DOS的区别有多大,毕竟cmd还是属于DOS范畴,别攻击我,我是这么认为的。我还是原来的论调,以实用为主,不要形而上学。