中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 01:28
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结] 请教各位老师如何根据一个条件而改文件
可打印版本  2,120 / 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:
是啊,当然不是三行,只是选三个,其实有12个店的,回显要不要都无所谓啦,提示一下已改动就行了,谢谢



丑陋代码登场。。。
这里假设你的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