![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 21:35 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结] 请教各位老师如何根据一个条件而改文件 |
| 可打印版本 2,109 / 28 |
| 第1楼 ccccpp | 发表于 2009-04-28 11:58 |
| 新手上路 发帖 17 积分 17 | |
|
[已结] 请教各位老师如何根据一个条件而改文件 修改如下
三个店,分别是A店 ,B店,C店,有一个参数文件CX.ini为: A=192.168.1.1 B=192.168.2.2 C=192.168.3.3 在另一个TEST.INI一个参数文件中其中有一小段: 。。。 <property name="ServerIP" type="string" description="店服务器">192.168.1.1</property> .。。。。 请问如何写出一个批处理,可通过选A或B或C 就把TEST。INI中的192.168.1.1改动,实现自动更改这个网络参数就,自动更改了TEST.INI中192.168.1.1部份,其它不用改, 谢谢[ Last edited by ccccpp on 2009-5-24 at 03:59 ] |
|
| 第2楼 Hanyeguxing | 发表于 2009-04-28 20:26 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
你描述问题不清楚。
你可以使用Findstr找到符合条件的。 然后使用set %PATH:str1=str2%替换。 |
|
| 第3楼 ccccpp | 发表于 2009-04-28 22:51 |
| 新手上路 发帖 17 积分 17 | |
|
不清吗?
就是这个批处理运行后,通过选A或B或C 就把TEST。INI中的192.168.1.1改动,实现自动更改这个网络参数,谢谢 |
|
| 第4楼 freeants001 | 发表于 2009-04-28 22:58 |
| 中级用户 发帖 244 积分 330 来自 湖北 | |
| 第5楼 ccccpp | 发表于 2009-04-30 01:40 |
| 新手上路 发帖 17 积分 17 | |
|
才疏学浅,看不明白,有这样的实例吗,请问,谢谢
|
|
| 第6楼 yangfengoo | 发表于 2009-04-30 06:48 |
| 初级用户 发帖 41 积分 47 | |
|
笨鸟先飞
大大们一两行代码的事,哎新手的3个小时代价写了个猥琐的代码: @echo off echo ::A店IP是 192.168.1.1 echo ::B店IP是 192.168.2.2 echo ::C店IP是 192.168.3.3 echo 请选择a,b or c @echo off set /p m= echo 你选择了%m% 按回车确定 pause if %m% equ a set str=192.168.1.1 if %m% equ b set str=192.168.2.2 if %m% equ c set str=192.168.3.3 type test.ini | findstr "192.168*" >temp1.txt for /f "tokens=1,2* delims=>" %%i in (temp1.txt) do ( for /f "tokens=2* delims=<" %%t in ("%%j") do ( echo %%i^>%str%^<%%t^> >temp2.txt) ) @echo off & setlocal EnableDelayedExpansion echo.>new_TEST.INI for /f "tokens=*" %%i in (TEST.INI) do set var1=%%i && for /f "tokens=*" %%s in (temp1.txt) do set var2=%%s && if "!var2!"=="!var1!" (for /f "tokens=*" %%t in (temp2.txt) do echo %%t>>new_TEST.INI) else (echo %%i>>new_TEST.INI) cls del temp1.txt del temp2.txt echo IP已修改至new_TEST.INI可以按"回车"将用new_TEST.INI覆盖原TEST.INI pause del TEST.INI ren new_TEST.INI TEST.INI 找了半天不知道把 type test.ini | findstr "192.168*" 的返回值怎么传给FOR命令。 |
|
| 第7楼 ccccpp | 发表于 2009-05-04 00:32 |
| 新手上路 发帖 17 积分 17 | |
|
谢谢这位老师,但测试过,原TEST。INI改后加多了一空行,同时,原来CX.ini参数文件就没有用了,都把参数全写进批处理了,如果要改动,又要重写一次,可不可以根据这个CX.ini里的参数需改动这个TEST。INI,这样就方便了,谢谢。
|
|
| 第8楼 wuwei1dai | 发表于 2009-05-04 06:32 |
| 初级用户 发帖 22 积分 44 来自 广安 | |
|
@echo off
:sr cls echo. echo. echo 请输入店号(注意大小写): set /p m= echo 你选择了%m% 按回车确定 pause>nul for /f "tokens=1,3" %%a in (cx.ini) do ( if %m%==%%a ( set str=%%b goto :xg ) ) cls echo 你输入的店号不存在! ping -n 3 127.1>nul goto :sr :xg cls type c:\test.ini | findstr "192.168*" >temp1.txt for /f "tokens=1,2* delims=>" %%i in (temp1.txt) do ( for /f "tokens=2* delims=<" %%t in ("%%j") do ( echo %%i^>%str%^<%%t^> >temp2.txt) ) @echo off & setlocal EnableDelayedExpansion del /f/q/a new_TEST.INI for /f "tokens=*" %%i in (TEST.INI) do set var1=%%i && for /f "tokens=*" %%s in (temp1.txt) do set var2=%%s && if "!var2!"=="!var1!" (for /f "tokens=*" %%t in (temp2.txt) do echo %%t>>new_TEST.INI) else (echo %%i>>new_TEST.INI) cls del temp1.txt del temp2.txt echo IP已修改至new_TEST.INI可以按"回车"将用new_TEST.INI覆盖原TEST.INI pause del TEST.INI ren new_TEST.INI TEST.INI 这下没空行,直接该CX。INI文件了,点CX。INI的格式要该成如下: A = 192.168.1.1 B = 192.168.2.2 C = 192.168.3.3 在 = 两边加个空格,你再加多少行都可以,D E F G …… 多个字母合起也行 HJ SKJDL SKDFJKLJ 等等 |
|
| 第9楼 wuwei1dai | 发表于 2009-05-04 07:10 |
| 初级用户 发帖 22 积分 44 来自 广安 | |
|
if %m%==%%a 该成 if /i %m%==%%a
就不用分大小写了 |
|
| 第10楼 ccccpp | 发表于 2009-05-04 22:39 |
| 新手上路 发帖 17 积分 17 | |
|
谢谢,好像不太成功,只生成了两个文本文件,原文件没改
|
|
| 第11楼 flybird2020 | 发表于 2009-05-04 23:42 |
| 初级用户 发帖 52 积分 103 | |
|
你想用cx.ini内容来做变量,不想再改动BAT内容
那你这A、B、C三个选项不加回显么? 回显的话显示什么呢?如果写死,那cx.ini改了,这里一定要改 另你说有三个店,一共就三句,为何要调用cx.ini呢 代码不难,就是你这需求我搞不清楚。。。 |
|
| 第12楼 ccccpp | 发表于 2009-05-05 00:21 |
| 新手上路 发帖 17 积分 17 | |
|
是啊,当然不是三行,只是选三个,其实有12个店的,回显要不要都无所谓啦,提示一下已改动就行了,谢谢
|
|
| 第13楼 flybird2020 | 发表于 2009-05-05 01:34 |
| 初级用户 发帖 52 积分 103 | |
Originally posted by ccccpp at 2009-5-5 12:21 AM: 丑陋代码登场。。。 这里假设你的cx.ini的等号是全角下的(你发上来的代码是的),如果不是的话你自己改一下“set /p word=请输入您的选择:”下面一行的“delims=”吧。 安全起见,你的文件做好备份。 [ Last edited by flybird2020 on 2009-5-5 at 01:47 ] |
|
| 第14楼 yangfengoo | 发表于 2009-05-05 03:16 |
| 初级用户 发帖 41 积分 47 | |
|
变量截取 for /f "tokens=*" %%a in (cx.ini) do ( set ip=%%a if "!ip:~2,7!" neq "192.168" echo 数据格式有误,请检查cx.ini。&&pause>nul&&goto start 及 set "var=!var:%oldip%=%ip:~2%!" 这样就不需要管=了。 [ Last edited by yangfengoo on 2009-5-5 at 03:43 ] |
|
| 第15楼 yangfengoo | 发表于 2009-05-05 04:04 |
| 初级用户 发帖 41 积分 47 | |
|
这句
if "!ip:~2,7!" neq "192.168" echo 数据格式有误,请检查cx.ini。&&pause>nul&&goto start 最好该为 if "!ip:~2,7!" neq "192.168" echo 数据格式有误,请检查cx.ini。&&pause>nul&&goto startit 因为只检查cx.ini 没必要再检查test.ini |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |