|
ccccpp
新手上路
积分 17
发帖 17
注册 2008-9-14
状态 离线
|
『楼 主』:
[已结] 请教各位老师如何根据一个条件而改文件
修改如下
三个店,分别是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 ]
|
|
2009-4-28 11:58 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
2 楼』:
你描述问题不清楚。
你可以使用Findstr找到符合条件的。
然后使用set %PATH:str1=str2%替换。
|
|
2009-4-28 20:26 |
|
|
ccccpp
新手上路
积分 17
发帖 17
注册 2008-9-14
状态 离线
|
『第
3 楼』:
不清吗?
就是这个批处理运行后,通过选A或B或C 就把TEST。INI中的192.168.1.1改动,实现自动更改这个网络参数,谢谢
|
|
2009-4-28 22:51 |
|
|
freeants001
中级用户
积分 330
发帖 244
注册 2006-4-14 来自 湖北
状态 离线
|
|
2009-4-28 22:58 |
|
|
ccccpp
新手上路
积分 17
发帖 17
注册 2008-9-14
状态 离线
|
『第
5 楼』:
才疏学浅,看不明白,有这样的实例吗,请问,谢谢
|
|
2009-4-30 01:40 |
|
|
yangfengoo
初级用户
积分 47
发帖 41
注册 2009-4-24
状态 离线
|
『第
6 楼』:
笨鸟先飞
大大们一两行代码的事,哎新手的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命令。
|
正在学习中…… |
|
2009-4-30 06:48 |
|
|
ccccpp
新手上路
积分 17
发帖 17
注册 2008-9-14
状态 离线
|
『第
7 楼』:
谢谢这位老师,但测试过,原TEST。INI改后加多了一空行,同时,原来CX.ini参数文件就没有用了,都把参数全写进批处理了,如果要改动,又要重写一次,可不可以根据这个CX.ini里的参数需改动这个TEST。INI,这样就方便了,谢谢。
|
|
2009-5-4 00:32 |
|
|
wuwei1dai
初级用户
积分 44
发帖 22
注册 2008-12-10 来自 广安
状态 离线
|
『第
8 楼』:
@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 等等
|
|
2009-5-4 06:32 |
|
|
wuwei1dai
初级用户
积分 44
发帖 22
注册 2008-12-10 来自 广安
状态 离线
|
『第
9 楼』:
if %m%==%%a 该成 if /i %m%==%%a
就不用分大小写了
|
|
2009-5-4 07:10 |
|
|
ccccpp
新手上路
积分 17
发帖 17
注册 2008-9-14
状态 离线
|
『第
10 楼』:
谢谢,好像不太成功,只生成了两个文本文件,原文件没改
|
|
2009-5-4 22:39 |
|
|
flybird2020
初级用户
积分 103
发帖 52
注册 2007-4-13
状态 离线
|
『第
11 楼』:
你想用cx.ini内容来做变量,不想再改动BAT内容
那你这A、B、C三个选项不加回显么?
回显的话显示什么呢?如果写死,那cx.ini改了,这里一定要改
另你说有三个店,一共就三句,为何要调用cx.ini呢
代码不难,就是你这需求我搞不清楚。。。
|
|
2009-5-4 23:42 |
|
|
ccccpp
新手上路
积分 17
发帖 17
注册 2008-9-14
状态 离线
|
『第
12 楼』:
是啊,当然不是三行,只是选三个,其实有12个店的,回显要不要都无所谓啦,提示一下已改动就行了,谢谢
|
|
2009-5-5 00:21 |
|
|
flybird2020
初级用户
积分 103
发帖 52
注册 2007-4-13
状态 离线
|
『第
13 楼』:
Quote: | Originally posted by ccccpp at 2009-5-5 12:21 AM:
是啊,当然不是三行,只是选三个,其实有12个店的,回显要不要都无所谓啦,提示一下已改动就行了,谢谢 |
|
@echo off&&setlocal enabledelayedexpansion
:start
call :delit
for /f "tokens=2 delims=>" %%a in (test.ini) do (
set itis=%%a
if "!itis:~0,7!"=="192.168" set oldip=!itis:~0,-10!&&call :startit&&exit/b
)
:startit
cls
echo 选项列表
if exist cx.ini (type cx.ini) else (echo 未发现cx.ini,请确认是否在同级目录下。&&pause>nul&&goto :eof)
echo.
set /p word=请输入您的选择:
if /i "%word%"=="" call :error
for /f "tokens=1,2 delims==" %%a in (cx.ini) do (
set ip=%%b
if "!ip:~0,7!" neq "192.168" echo 数据格式有误,请检查cx.ini。&&pause>nul&&goto start
echo 您选择的是:%%a|findstr /i "%word%"&&call :setit&&exit/b
)
:error
echo 您输入的有误,请重新输入。&&pause>nul&&goto start
:setit
for /f "delims=" %%a in (test.ini) do (
set var=%%a
set "var=!var:%oldip%=%ip%!"
>>test2.ini echo !var!
)
copy /y test2.ini test.ini>nul
echo 处理完毕,请查看。
pause>nul
:delit
if exist test2.ini del test2.ini/f/q 丑陋代码登场。。。
这里假设你的cx.ini的等号是全角下的(你发上来的代码是的),如果不是的话你自己改一下“set /p word=请输入您的选择:”下面一行的“delims=”吧。
安全起见,你的文件做好备份。
[ Last edited by flybird2020 on 2009-5-5 at 01:47 ]
|
|
2009-5-5 01:34 |
|
|
yangfengoo
初级用户
积分 47
发帖 41
注册 2009-4-24
状态 离线
|
『第
14 楼』:
@echo off&&setlocal enabledelayedexpansion
:start
call :delit
for /f "tokens=2 delims=>" %%a in (test.ini) do (
set itis=%%a
if "!itis:~0,7!"=="192.168" set oldip=!itis:~0,-10!&&call :startit&&exit/b
)
:startit
cls
echo 选项列表
if exist cx.ini (type cx.ini) else (echo 未发现cx.ini,请确认是否在同级目录下。&&pause>nul&&goto :eof)
echo.
set /p word=请输入您的选择:
if /i "%word%"=="" call :error
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
echo 您选择的是:!ip:~0,1! |findstr /i "%word%"&&call :setit&&exit/b
)
:error
echo 您输入的有误,请重新输入。&&pause>nul&&goto start
:setit
for /f "delims=" %%a in (test.ini) do (
set var=%%a
set "var=!var:%oldip%=%ip:~2%!"
>>test2.ini echo !var!
)
copy /y test2.ini test.ini>nul
echo 处理完毕,请查看。
pause>nul
:delit
if exist test2.ini del test2.ini/f/q 变量截取
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 ]
|
正在学习中…… |
|
2009-5-5 03:16 |
|
|
yangfengoo
初级用户
积分 47
发帖 41
注册 2009-4-24
状态 离线
|
『第
15 楼』:
这句
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
|
正在学习中…… |
|
2009-5-5 04:04 |
|