![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 13:02 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]关于读取文本文件的批处理问题! |
| 可打印版本 988 / 7 |
| 第1楼 boy | 发表于 2008-11-18 16:45 |
| 初级用户 发帖 29 积分 29 | |
|
[已结]关于读取文本文件的批处理问题! 我有一个文本文件Config.ini,其内容为:
Publish=N PublishDateTime=20081118140545 UpdateServerB=N UpdateDateTime=20081118140545 Backup=Y BackupDateTime=20081118144225 FallBack=N FallbackDateTime=20080218091231 我以前写了个批处理,可以读取Config.ini文件里的内容,并进行操作,如果Publish=Y,就调用Publish.bat,并将Config.ini里面的Publish=Y改成Publish=N;同理,如果UpdateServerB=Y,就调用UpdateServerB.bat,并将UpdateServerB置为N,同时将文本中的时间PublishDateTime传递给Publish.bat和UpdateServerB.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=N" ( exit ) 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 但现在我想要该批处理在原有的基础上增加一个功能,可以实现如果Backup=Y,则调用Backup.bat,并将Backup=Y改成Backup=N,同时传给Backup.bat的%date%的值为文本中BackupDateTime的值;如果FallBack=Y,则调用FallBack.bat,并将FallBack=Y改成FallBack=N,同时将FallbackDateTime的值传给FallBack.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" ) for /f "delims=" %%b in ('findstr /i "^BackupDateTime" Config.ini') do set num2=%%b set bakdate=%num2:~15% for /f "delims=" %%b in (Config.ini) do ( if not defined flag (call :loop "%%b" b) else call :bak "%%b" ) exit :loop set num=%~1 if "%~2"=="" (set "flag=>>") else set "flag=>" if "%~1"=="Publish=N" ( exit ) 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 ) :bak set num2=%~1 if "%~2"=="" (set "flag=>>") else set "flag=>" if "%~1"=="Backup=N" ( exit ) if "%~1"=="Backup=Y" ( echo Backup=N>>Config.ini call Backup.bat %bakdate% goto :eof ) >>Config.ini echo %~1 谁能帮我修改一下啊?!谢了! [ Last edited by boy on 2008-11-19 at 08:53 ] |
|
| 第2楼 HAT | 发表于 2008-11-18 17:43 |
| 版主 发帖 5,017 积分 9,023 | |
|
不行的具体表现是什么?
|
|
| 第3楼 boy | 发表于 2008-11-18 17:59 |
| 初级用户 发帖 29 积分 29 | |
Originally posted by HAT at 2008-11-18 17:43: 表现是文本Config.ini没有变化,没有被修改,而这个批处理一运行就消失了,看不到运行后显示的信息,太快了。 附上Backup.bat的内容: @echo off set date=%~1 start /b xcopy /s/h/r/y/c D:\Inetpub\wwwroot\whbcn\public_html\Website\*.* D:\Inetpub\wwwroot\whbcn\website_design\PublickHtml_Backup\%date%\>D:\Inetpub\wwwroot\whbcn\website_design\Log\backup\%date%.log goto :eof exit |
|
| 第4楼 tireless | 发表于 2008-11-18 18:04 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
[ Last edited by tireless on 2008-11-18 at 19:17 ] |
|
| 第5楼 boy | 发表于 2008-11-18 18:53 |
| 初级用户 发帖 29 积分 29 | |
|
感谢tireless,太牛了,代码超级精简!
功能虽然没问题,不过有个疑问,因为批处理运行的时候我可以看到相关信息,当Backup=Y,运行到if defined FallBack call FallBack.bat %FallbackDateTime%的时候,批处理窗口显示: ..>XXecho off 'XXecho'不是内部或外部命令,也不是可运行的程序或批处理文件。 为什么不像前面的信息那样,显示 ..>if defined FallBack call FallBack.bat 20080218091231 呢? [ Last edited by boy on 2008-11-18 at 18:54 ] |
|
| 第6楼 tireless | 发表于 2008-11-18 20:46 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
Re 5楼 不知道问题出在哪,我简单测试了下,好像没什么问题
|
|
| 第7楼 HAT | 发表于 2008-11-18 20:56 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 4楼 建议在任何批处理中都不要使用和系统环境变量重名的自定义变量
如date |
|
| 第8楼 boy | 发表于 2008-11-19 08:52 |
| 初级用户 发帖 29 积分 29 | |
Originally posted by HAT at 2008-11-18 20:56: 是的,谢谢 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |