中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (直接看3楼)怎样将这2个批处理整合成一个?
作者:
标题: (直接看3楼)怎样将这2个批处理整合成一个? 上一主题 | 下一主题
westwind
初级用户





积分 72
发帖 28
注册 2008-4-17
状态 离线
『楼 主』:  (直接看3楼)怎样将这2个批处理整合成一个?

有2个批处理文件 HandlePublish.bat 和 HandleFlexi.bat 去读取配置文件Config.ini: publish=N publishDateTime=200805131427 updateServerB=N updateDateTime=200805131427 Backup=N BackupDateTime=200804180912 DeleteBak=N DateTimeByDel=200802180912 FallBack=N DateTimeByFallback=200802180912 ============================ 批处理HandlePublish.bat读Config.ini的时候,如果发现参数publish=Y,则执行脚本文件Publish.bat(并传递参数publishDateTime的值给Publish.bat ),执行完后将Config.ini里publish的值改成N,HandlePublish.bat的内容如下: @echo off for /f "delims=" %%a in ('findstr /i "^publishDateTime" Config.ini') do set num=%%a set date=%num:~15% for /f "delims=" %%a in (Config.ini) do ( if not defined flag (call :loop "%%a" a) else call :loop "%%a" ) exit :loop set num=%~1 if "%~2"=="" (set "flag=>>") else set "flag=>" if "%~1"=="publish=Y" ( echo publish=N%flag%Config.ini call Publish.bat %date% ) else echo %~1%flag%Config.ini goto :eof 批处理HandleFlexi.bat也一样,先判断updateServerB=Y的话,执行脚本updateServerB.bat,并传递参数updateDateTime的值给它,执行完updateServerB.bat后,将Config.ini里updateServerB=N, HandleFlexi.bat的内容为: @echo off for /f "delims=" %%a in ('findstr /i "^updateDateTime" Config.ini') do set num=%%a set date=%num:~15% for /f "delims=" %%a in (Config.ini) do ( if not defined flag (call :loop "%%a" a) else call :loop "%%a" ) exit :loop set num=%~1 if "%~2"=="" (set "flag=>>") else set "flag=>" if "%~1"=="updateServerB=Y" ( echo updateServerB=N%flag%Config.ini call UpdateServerB.bat %date% ) else echo %~1%flag%Config.ini goto :eof 现在的问题是分别执行HandlePublish.bat 和 HandleFlexi.bat 没问题,但同时运行的话,Config.ini会被改乱(我是通过同时建2个任务计划来分别执行它们的). 可否把这2个写成一个bat文件呢?功能不变 多谢! [ Last edited by westwind on 2008-5-14 at 02:51 PM ]


2008-5-14 12:20
查看资料  发短消息  网志   编辑帖子  回复  引用回复
westwind
初级用户





积分 72
发帖 28
注册 2008-4-17
状态 离线
『第 2 楼』:  

我调整了一下思路,应该是先运行完HandlePublish.bat,再运行HandleFlexi.bat. 在HandlePublish里面exit之前call HandleFlexi.bat,发现Config.ini里面正确的内容在原来的后面加上去的,而不是替换: publish=Y publishDateTime=200805131427 updateServerB=Y updateDateTime=200805131427 Backup=N BackupDateTime=200804180912 DeleteBak=N DateTimeByDel=200802180912 FallBack=N DateTimeByFallback=200802180912 -----------这部分--- publish=N publishDateTime=200805131427 updateServerB=N updateDateTime=200805131427 Backup=N BackupDateTime=200804180912 DeleteBak=N DateTimeByDel=200802180912 FallBack=N DateTimeByFallback=200802180912


2008-5-14 14:15
查看资料  发短消息  网志   编辑帖子  回复  引用回复
westwind
初级用户





积分 72
发帖 28
注册 2008-4-17
状态 离线
『第 3 楼』:  

请问我这样整合之后为什么Config.ini的有些行后面会多出一些"=" ? publish=N publishDateTime=200805131427= updateServerB=N updateDateTime=200805131427= Backup=N = BackupDateTime=200804180912 = DeleteBak=N = DateTimeByDel=200802180912 = FallBack=N = DateTimeByFallback=200802180912 = 整合后的代码: @echo off for /f "delims=" %%a in ('findstr /i "^publishDateTime" Config.ini') do set num=%%a set date=%num:~15% for /f "delims=" %%a in (Config.ini) do ( if not defined flag (call :loop "%%a" a) else call :loop "%%a" ) exit :loop set num=%~1 if "%~2"=="" (set "flag=>>") else set "flag=>" if "%~1"=="publish=Y" ( echo publish=N>Config.ini call Publish.bat %date% goto :eof ) if "%~1"=="updateServerB=Y" ( echo updateServerB=N>>Config.ini call UpdateServerB.bat %date% goto :eof ) >>Config.ini echo %~1=%~2 [ Last edited by westwind on 2008-5-14 at 02:52 PM ]


2008-5-14 14:50
查看资料  发短消息  网志   编辑帖子  回复  引用回复
westwind
初级用户





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

问题解决了


   此帖被 +4 点积分     点击查看详情   
评分人:【 slore 分数: +4  时间:2008-5-14 16:52


2008-5-14 14:59
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: