中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结] 请教各位老师如何根据一个条件而改文件
« [1] [2] »
作者:
标题: [已结] 请教各位老师如何根据一个条件而改文件 上一主题 | 下一主题
ccccpp
新手上路





积分 17
发帖 17
注册 2008-9-14
状态 离线
『第 16 楼』:  

谢谢,但还有误。
如cx.ini 是
a=192.168.221.233
b=173.207.16.5
c=163.202.95.128

test.ini 是
dfasdgasgasfg
ghghsghfd
<property name="ServerIP" type="string" description="店服务器">192.168.221.4</property>
dfasdfgasdga
dgasg

测试后就不能改成b的情况了,其实test.ini中的IP是不一定192开头的

2009-5-5 04:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yangfengoo
初级用户




积分 47
发帖 41
注册 2009-4-24
状态 离线
『第 17 楼』:  

把这句删掉
if "!ip:~2,7!" neq "192.168" echo 数据格式有误,请检查cx.ini。&&pause>nul&&goto start
就可以了。



正在学习中……
2009-5-5 04:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccccpp
新手上路





积分 17
发帖 17
注册 2008-9-14
状态 离线
『第 18 楼』:  

还是错,
运行后选b 第一次改成功,再运行改选c
test.ini就全变了

[ Last edited by ccccpp on 2009-5-5 at 05:08 ]

2009-5-5 05:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yangfengoo
初级用户




积分 47
发帖 41
注册 2009-4-24
状态 离线
『第 19 楼』:  

不是我写的没仔细研究,
我再看一下。



正在学习中……
2009-5-5 05:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flybird2020
初级用户





积分 103
发帖 52
注册 2007-4-13
状态 离线
『第 20 楼』:  



  Quote:
Originally posted by ccccpp at 2009-5-5 04:41 AM:
谢谢,但还有误。
如cx.ini 是
a=192.168.221.233
b=173.207.16.5
c=163.202.95.128

test.ini 是
dfasdgasgasfg
ghghsghfd
<property name="ServerIP" type="string" ...

我以为你Test.ini指定的192.168.1.1,cx.ini里也是局域网的IP

问题就这两点,我上班暂时不太有时间,劳烦yangfengoo兄帮忙纠下错吧

2009-5-5 05:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 21 楼』:  

试试

附件 1: test.rar (2009-5-5 07:11, 685 bytes,下载次数: 8)


三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2009-5-5 07:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yangfengoo
初级用户




积分 47
发帖 41
注册 2009-4-24
状态 离线
『第 22 楼』:  


@echo off & setlocal EnableDelayedExpansion

echo          请确保cx.ini test.ini及本文件在同一文件夹
type cx.ini
echo.
echo   请选择
set /p m=
echo 你选择了!m! 按回车确定
pause

type cx.ini | findstr /i "!m!" >temp0.txt
for /f "tokens=*" %%a in (temp0.txt) do (
set ip=%%a
set str=!ip:~2!
)


type test.ini | findstr "店服务器" >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)   
        )


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
echo IP已修改至new_TEST.INI可以按"回车"将用new_TEST.INI覆盖原TEST.INI
pause
del temp?.txt

copy /y new_TEST.INI TEST.INI
del new_TEST.INI
看我的笨方法



正在学习中……
2009-5-5 07:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yangfengoo
初级用户




积分 47
发帖 41
注册 2009-4-24
状态 离线
『第 23 楼』:  

自己不把问题说清楚,害得大家忙半天。

你应该把 CX.INI TEST.INI 全部或大部分传上了。

你给的信息少又没代表性。



正在学习中……
2009-5-5 07:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccccpp
新手上路





积分 17
发帖 17
注册 2008-9-14
状态 离线
『第 24 楼』:  

老师们说得对,没有上传所有,但都是看到答复才想起来的,不过第一楼中的192.168.1.1我用红色标示了,代表是一个变量(或一段字符),后来才知cx.ini中的=号还有全角半角之分,=号后还有空格和无空格的不同,实在是才疏学浅,太谢谢老师们了,明天回单位测试一下,愿成功!

2009-5-5 10:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yangfengoo
初级用户




积分 47
发帖 41
注册 2009-4-24
状态 离线
『第 25 楼』:  


::学习笔记
::疑问for /f "tokens=*" %%a in ('findstr "%m%" cx.ini') do set ip=%%a会在IP后多产生一空格
::解决我的方法 && set ip=!ip: =!替换掉空格
::解决21,22楼TEST.ini中含多个“店服务器”出错问题
::说明此方案中“店服务器”后IP必须一致否则出错,

@echo off & setlocal EnableDelayedExpansion

type cx.ini & echo.

set /p m=

for /f "tokens=*" %%a in ('findstr "%m%" cx.ini') do set ip=%%a  && set ip=!ip: =!

for /f "tokens=2 delims=><" %%c in ('findstr "店服务器" TEST.ini') do set oldip=%%c

for /f "tokens=*" %%i in (TEST.INI) do (
  set str=%%i   
  set str=!str:%oldip%=%ip:~2%!
  echo !str!>>new_TEST.txt
)
del TEST.ini
ren new_TEST.txt TEST.ini




正在学习中……
2009-5-6 02:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccccpp
新手上路





积分 17
发帖 17
注册 2008-9-14
状态 离线
『第 26 楼』:  

为达想想效果,写全全部参数
dpc.ini是
[loader]
port = 2308
host = 115.0.1.59

cx.ini是
a=2308
b=2309
c=2310

按ccwan例子改动 test.bat是
rem MS-DOS batch file
rem
@echo off
cls
echo ╔-                                -╗
echo   2308:0007,0657,8569,0138,0109
echo   2309:0656
echo   2310:0024,0658,1126,8565,8568,0607
echo ╚-                                -╝
Title [更改升级配置文件dpc.ini]
::批处理命令开始-----------------------------------
@echo off&setlocal enabledelayedexpansion
echo 请选择A,B or C
set /p slect=
for /f "tokens=1,2 delims==" %%a in (cx.ini) do (
    if /i "%slect%"=="%%a" (
        for /f "tokens=1* delims=:" %%i in ('findstr /n .* "dpc.ini"') do (
            for /f "tokens=2 delims== " %%? in ('findstr "port" dpc.ini') do (
                set str=%%j
                if not "!str!"=="" set "str=!str:%%?=%%b!"&>>dpc.txt echo.!str!
            )
        )
    )
)
copy dpc.ini dpc_BAK.txt >nul 2>nul
move dpc.txt dpc.ini
start "" dpc.ini
::批处理命令结束-----------------------------------
pause::[提示按任意键结束...]
已按大虾的更改了,可成!

[ Last edited by ccccpp on 2009-5-12 at 05:32 ]

2009-5-8 03:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 27 楼』:  

你的dpc.ini里没有><符号啊。
换成=就行了。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2009-5-9 05:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccccpp
新手上路





积分 17
发帖 17
注册 2008-9-14
状态 离线
『第 28 楼』:  

按ccwan大哥的方法已可以完成更改设置,如果想把dpc.ini中的"host = 115.0.1.59"一行也写成固定的,请问要添加什么代码?因为原来初始的"host = XXX.XXX.XXX.XXX"的一行是不同机器不同的,想把它写定了。谢谢

[ Last edited by ccccpp on 2009-5-12 at 05:35 ]

2009-5-12 05:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccccpp
新手上路





积分 17
发帖 17
注册 2008-9-14
状态 离线
『第 29 楼』:  [已结] 请教各位老师如何根据一个条件而改文件

经ccwan ,yishanju,jmz573515等几位老师指导,完成想要的功能了,谢谢!
rem MS-DOS batch file
rem
@echo off
cls
echo ╔-                                -╗
echo   2308:0007,0657,8569,0138,0109
echo   2309:0656
echo   2310:0024,0658,1126,8565,8568,0607
echo ╚-                                -╝
Title [更改升级配置文件dpc.ini]
::批处理命令开始-----------------------------------
@echo off&setlocal enabledelayedexpansion
echo 请选择A,B or C
set /p slect=
for /f "tokens=1,2 delims==" %%a in (cx.ini) do (
    if /i "%slect%"=="%%a" (
        for /f "tokens=1* delims=:" %%i in ('findstr /n .* "dpc.ini"') do (
            for /f "tokens=2 delims== " %%? in ('findstr "port" dpc.ini') do (
                set str=%%j
                if not "!str!"=="" set "str=!str:%%?=%%b!"&>>dpc.txt echo.!str!
            )
        )
    )
)
copy dpc.ini dpc_BAK.txt >nul 2>nul
move dpc.txt dpc.ini

@echo off&setlocal enabledelayedexpansion
(for /f "delims=" %%i in (dpc.ini) do (
        set str=%%i
        if "!str:~0,6!"=="host =" set "str=host = 115.0.1.59"
        echo !str!
))>#dpc.ini
move #dpc.ini dpc.ini
start "" dpc.ini
::批处理命令结束-----------------------------------
pause::[提示按任意键结束...]


2009-5-24 03:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: