中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 根据文本内容,逐行修改同一个INI
« [1] [2] »
作者:
标题: 根据文本内容,逐行修改同一个INI 上一主题 | 下一主题
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『楼 主』:  根据文本内容,逐行修改同一个INI

文本A.txt内容:

1111
2222
3333
4444
5555
...................
行数不定


然后根据里面的内容,再判断C:\已更新.txt是否已经有相同的内容,如果没有,就修改C:\B.ini文件,如果有,接着读取第二行

C:\B.ini文件的内容
[更新]
源目录=D:\1111
目标目录=E:\1111



每读取A.txt一行,就修改C:\B.ini的内容一次(生成C:\B.ini也行)
然后执行C:\程序.exe
接着写入日志   1111>>C:\已更新.txt
然后接着读取第二行,执行以上相同操作,直到读取完所有的行才退行

2009-6-27 04:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  


::该批处理没有经过全面测试
::在这里,每次需要关闭 C:\程序.exe 才进入下一循环,如果不想这样,使用start。
::由于fc 问题太多,这里没有使用他进行比较。
::工作前提条件为,c:\已更新.txt 的内容是A.txt的一部分,切记!
::%xing%设置关键词,确保原始的c:\已更新.txt和A.txt文件中没有“寒夜孤星”四个字,否则请更换
@echo off
set xing=寒夜孤星
for /f "delims=" %%i in (c:\已更新.txt) do echo %%i>>han.txt
echo %xing%>>han.txt
for /f "delims=" %%i in (A.txt) do echo %%i>>han.txt
for /f "delims=" %%i in (han.txt) do (
        if not defined %%i set %%i=A & echo %%i>>ye.txt
)
del han.txt /q /f
for /f "delims=:" %%i in ('findstr /n .* ye.txt ^|findstr /r /c:"%xing%"') do set gu=%%i
echo [更新]>C:\B.ini
for /f "skip=%gu% delims=" %%i in (ye.txt) do (
"C:\程序.exe"
echo 源目录=D:\%%i>>C:\B.ini
echo 目标目录=E:\%%i>>C:\B.ini
echo %%i>>c:\已更新.txt
)
del ye.txt /q /f
[ Last edited by Hanyeguxing on 2009-6-27 at 06:53 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 wmysbbs 分数: +2  时间:2009-6-27 07:29




批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-6-27 06:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 3 楼』:  

呵呵,又是Hanyeguxing兄啊,多谢~~~

一会去测试一下效果

[ Last edited by wmysbbs on 2009-6-27 at 06:27 ]

2009-6-27 06:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 4 楼』:  

需要说明的是,批处理中:
for /f "delims=" %%i in (c:\已更新.txt) do echo %%i>>han.txt
1,作用是删除源文件中的空行
2,生成新文件
3,确保下一命令 echo %xing%>>han.txt 输出到新的一行中

for /f "delims=" %%i in (A.txt) do echo %%i>>han.txt
也有类似的作用

[ Last edited by Hanyeguxing on 2009-6-27 at 06:57 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-6-27 06:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 5 楼』:  

我得把之前的代码和这段代码结合起来,因为之前发现xcopy更新的时候不太好用!!

2009-6-27 06:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 6 楼』:  

是不是 A.txt 的内容存在于 C:\已更新.txt 就直接下一行,而不存在于 C:\已更新.txt,就 (
  修改 C:\B.ini
  执行 C:\程序.exe
  写入该行>>C:\已更新.txt
)

2009-6-27 07:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by tireless at 2009-6-27 07:22 AM:
是不是 A.txt 的内容存在于 C:\已更新.txt 就直接下一行,而不存在于 C:\已更新.txt,就 (
  修改 C:\B.ini
  执行 C:\程序.exe
  写入该行>>C:\已更新.txt
)

嗯,就是这样

2009-6-27 07:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 8 楼』:  

我稍微修改了一下代码


@echo off
set xing=寒夜孤星
for /f "delims=" %%i in (已更新.txt) do echo %%i>>han.txt
echo %xing%>>han.txt
for /f "delims=" %%i in (A.txt) do echo %%i>>han.txt
for /f "delims=" %%i in (han.txt) do (
        if not defined %%i set %%i=A & echo %%i>>ye.txt
)
del han.txt /q /f
for /f "delims=:" %%i in ('findstr /n .* ye.txt ^|findstr /r /c:"%xing%"') do set gu=%%i

for /f "skip=%gu% delims=" %%i in (ye.txt) do (

del C:\cfg.ini /q
echo [更新]>C:\cfg.ini
echo 远程目录=D:\%%i>>C:\cfg.ini
echo 本地目录=E:\%%i>>C:\cfg.ini
"C:\原调用.exe"


echo %%i>>已更新.txt
)
del ye.txt /q /f

2009-6-27 07:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 9 楼』:  

基本上就是这样,set xing=寒夜孤星 好象可以不要这一段的吧?

2009-6-27 07:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 10 楼』:  


@echo off
set ?list="A.txt"
set ?ini="C:\B.ini"
set ?app="C:\程序.exe"
set ?log="C:\已更新.txt"

for /f "usebackq eol= delims=" %%a in (%?log%) do set %%a=.

for /f "usebackq eol= delims=" %%a in (%?list%) do (
  if not defined %%a (
    echo [更新]
    echo 源目录=D:\%%a
    echo 目标目录=E:\%%a
    %?app%
    echo;%%a>>%?log%
  ) > %?ini%
)
[ Last edited by tireless on 2009-6-27 at 09:48 ]

   此帖被 +4 点积分    点击查看详情   
评分人:【 wmysbbs 分数: +2  时间:2009-6-27 08:16
评分人:【 Hanyeguxing 分数: +2  时间:2009-6-27 08:19


2009-6-27 07:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 11 楼』:  

@echo off&&setlocal enabledelayedexpansion
set datais=E:\Progra~1\HintSoft\XsServer\DownLoad\Logs\
del !datais!更新对比.bat /f /q>nul 2>nul
set ha=%date:~0,4%%date:~5,2%%date:~8,2%
set hb=%date:~0,4%
set hc=%date:~5,2%
For /f "skip=1 tokens=1-3 delims=," %%a in (!datais!DLog_%hb%_%hc%.log) do (
set gu=%%a
set ye=%%b
For /f "tokens=1-3 delims=- " %%i in ("%%c") do (
set str1=0%%j
set str2=0%%k
set xing=%%i!str1:~-2!!str2:~-2!
)

if "!gu!" == "成功" if "!xing!" == "!ha!" (

Echo xcopy F:\更多网游\!ye!\*.* H:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
Echo xcopy F:\更多网游\!ye!\*.* K:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
Echo xcopy F:\更多网游\!ye!\*.* N:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
Echo xcopy F:\更多网游\!ye!\*.* Q:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat

Echo xcopy F:\热门网游\!ye!\*.* H:\热门网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
Echo xcopy F:\热门网游\!ye!\*.* K:\热门网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
Echo xcopy F:\热门网游\!ye!\*.* N:\热门网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
Echo xcopy F:\热门网游\!ye!\*.* Q:\热门网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat

)
)
@Echo exit >>!datais!更新对比.bat
start !datais!更新对比.bat
exit



因为之前的代码是XCOPY,但XCOPY有时候不一定能完全对比,改用软件来对比更新

2009-6-27 07:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by tireless at 2009-6-27 07:31 AM:
[code]@echo off
set ?list="A.txt"
set ?ini="C:\B.ini"
set ?app="C:\程序.exe"
set ?log="C:\已更新.txt"

for /f "usebackq eol= delims=" % ...

赞一个

2009-6-27 08:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 13 楼』:  

现在问题又来了!!!!


@echo off&&setlocal enabledelayedexpansion

set XSLog=D:\Docume~1\Admini~1\桌面\同步游戏\
set TBLog=D:\Docume~1\Admini~1\桌面\同步游戏\Log\

set ha=%date:~0,4%%date:~5,2%%date:~8,2%
set hb=%date:~0,4%
set hc=%date:~5,2%

del !TBLog!!ha!需要更新.txt /f /q>nul 2>nul

For /f "skip=1 tokens=1-3 delims=," %%a in (!XSLog!DLog_%hb%_%hc%.log) do (
set gu=%%a
set ye=%%b
For /f "tokens=1-3 delims=- " %%i in ("%%c") do (
set str1=0%%j
set str2=0%%k
set xing=%%i!str1:~-2!!str2:~-2!
)
if "!gu!" == "成功" if "!xing!" == "!ha!" echo !ye!>>!TBLog!!ha!需要更新.txt
)

For /f "usebackq eol= delims=" %%a in (!TBLog!!ha!已更新.txt) do set %%a=.
For /f "usebackq eol= delims=" %%a in (!TBLog!!ha!需要更新.txt) do (
  if not defined %%a (
    echo [更新]
    echo 远程目录=D:\网络游戏\%%a
    echo 本地目录=E:\网络游戏\%%a
    原调用.exe
    echo;%%a>>!TBLog!!ha!已更新.txt
  ) > cfg.ini
)

pause





以上代码只能从D:\网络游戏\更新到E:\网络游戏\
要是想D:\网络游戏\再更新到F:\网络游戏\   G:\网络游戏\ ........
那要怎么改啊

D:\ E:\ F:\ G:\    这个不是按顺序的,是盘符自已定的

[ Last edited by wmysbbs on 2009-6-27 at 11:41 ]

2009-6-27 11:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 14 楼』:  

怎么得到这些盘符的?
想要除了C盘以外所有的硬盘盘符?
把具体的想法说清楚些,修改原贴就可以,不用总发新贴

[ Last edited by Hanyeguxing on 2009-6-27 at 13:08 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-6-27 12:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wmysbbs
初级用户




积分 172
发帖 52
注册 2005-3-29
状态 离线
『第 15 楼』:  

不是,这些盘符最好是自己设定好的,不要自动获取

Echo xcopy F:\更多网游\!ye!\*.* H:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
Echo xcopy F:\更多网游\!ye!\*.* K:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
Echo xcopy F:\更多网游\!ye!\*.* N:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat
Echo xcopy F:\更多网游\!ye!\*.* Q:\更多网游\!ye!\ /s/y/d/e >>!datais!更新对比.bat


就像XCOPY,自动分发更新到其他指定好的盘

[ Last edited by wmysbbs on 2009-6-27 at 13:16 ]

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


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



论坛跳转: