中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理怎样修改文件里的内容
<<   [1] [2]  >>   >
作者:
标题: 批处理怎样修改文件里的内容 上一主题 | 下一主题
westwind
初级用户





积分 72
发帖 28
注册 2008-4-17
状态 离线
『楼 主』:  批处理怎样修改文件里的内容

我现在有个配置文件config.ini,内容是: update=N updateDateTime=200804180912 Backup=N BackupDateTime=200804180912 DeleteBak=N DateTimeByDel=200802180912 FallBack=N DateTimeByFallback=200802180912 想通过一个批处理,修改其中的某些参数的值,如令update=Y, updateDateTime=当前时间,不想通过建临时文件--->删旧的--->临时文件重命名的方法实现,直接在config.ini里面改,其他的值不变。 谢了!


2008-5-13 11:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

@echo off
>"%tmp%\now.vbs" echo t=now()
>>"%tmp%\now.vbs" echo s=right(year(t),4) ^& right("0" ^& month(t),2) ^& right("0" ^& day(t),2) ^& right("0" ^& hour(t),2) ^& right("0" ^& minute(t),2)
>>"%tmp%\now.vbs" echo wscript.echo s
for /f %%a in ('cscript /nologo "%tmp%\now.vbs"') do set now=%%a
echo %now%
change config.ini /from update=N /to update=Y
change config.ini /from updateDateTime=* /to updateDateTime=%now%


2008-5-13 11:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 3 楼』:  

批处理
@echo off&&setlocal enabledelayedexpansion
set n=0
for /f "delims== tokens=1,2" %%i in (config.ini) do (
if !n! equ 0 (>config.ini echo %%i=Y) else (if !n! equ 1 (>>config.ini echo %%i=%time%) else (>>config.ini echo %%i=%%j))
set/a n+=1
)
pause
[ Last edited by huahua0919 on 2008-5-13 at 12:26 PM ]


   此帖被 +1 点积分    点击查看详情   
评分人:【 westwind 分数: +1  时间:2008-5-13 12:52


2008-5-13 12:10
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  我也来一个:

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type config.ini') do (
     set a=%%i&set /a n+=1
     if !n! equ 1 echo  (
        update=y>config.ini
        ) else (  
        if "!%a%:~,14!"=="updateDateTime" (
            echo !%a%:~,14!=%time%>>config.ini
            ) else (
            echo %%i>>config.ini
        )
     )
)
echo 修改完毕!
pause>nul
[ Last edited by zw19750516 on 2008-5-13 at 12:20 PM ]




批处理之家新域名:www.bathome.net
2008-5-13 12:15
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 5 楼』:  

晕。我那就不是纯的啊~!


2008-5-13 12:16
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  

回楼上,我发了才发现你已经发了。 如文件只是固定修改前两行的话就可以简化如下:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type config.ini') do (
     set /a n+=1
     if !n! equ 1 (
       echo update=y>config.ini
       ) else (
       if !n! equ 2 (
          echo updateDateTime=%time%>>config.ini
          ) else (
          echo %%i>>config.ini
       )
     )
)
echo 修改完毕!
pause>nul
[ Last edited by zw19750516 on 2008-5-13 at 12:32 PM ]




批处理之家新域名:www.bathome.net
2008-5-13 12:19
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
westwind
初级用户





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

huahua0919的不行啊,执行了没反映,zw19750516的运行完之后,config.ini文件里其他的数据都没了,只剩 update=y DateTimeByFallback=200802180912 zw19750516的第2个版本运行后,config.ini没有变化。。 [ Last edited by westwind on 2008-5-13 at 12:28 PM ]


2008-5-13 12:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 8 楼』:  

你再试试,我改了,是编辑的问题


2008-5-13 12:27
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 9 楼』:  

我开始是粗心(老是这个问题)把config.ini打成confing.ini了,请再测试


   此帖被 +1 点积分    点击查看详情   
评分人:【 westwind 分数: +1  时间:2008-5-13 12:52




批处理之家新域名:www.bathome.net
2008-5-13 12:33
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
westwind
初级用户





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

都OK! 感谢huahua0919和zw19750516的热心解答! 学习。~


2008-5-13 12:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 11 楼』:  

要想用纯P把时间转换成200804180912这种格式,又要考虑通用性,是比较困难的。


2008-5-13 12:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 12 楼』:  最终修正版:

修正当前时间格式
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type config.ini') do (
     set /a n+=1
     if !n! equ 1 (
       echo update=y>config.ini
       ) else (
       if !n! equ 2 (
          echo updateDateTime=%date:~,4%%date:~5,2%%date:~8,2%%time:~,2%%time:~3,2%>>config.ini
          ) else (
          echo %%i>>config.ini
       )
     )
)
echo 修改完毕!
pause>nul




批处理之家新域名:www.bathome.net
2008-5-13 12:44
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 13 楼』:  

我觉得纯P如果不通过读注册表判断日期/时间格式,是很难写出通用的代码的。


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





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

想问下zw19750516,我在config.ini的第1,2行加上2个参数: publish=N publishDateTime= update=N updateDateTime=200805131249 Backup=N BackupDateTime=200804180912 DeleteBak=N DateTimeByDel=200802180912 FallBack=N DateTimeByFallback=200802180912 然后对批处理进行如下修改,但有问题: @echo off&setlocal enabledelayedexpansion for /f "delims=" %%i in ('type config.ini') do ( set /a n+=1 if !n! equ 1( echo publish=Y>config.ini ) else ( if !n! equ 2 ( echo publishDateTime=%date:~,4%%date:~5,2%%date:~8,2%%time:~,2%%time:~3,2%>>config.ini ) else ( if !n! equ 3 ( echo update=Y>config.ini ) else ( if !n! equ 4 ( echo updateDateTime=%date:~,4%%date:~5,2%%date:~8,2%%time:~,2%%time:~3,2%>>config.ini ) else ( echo %%i>>config.ini ) ) ) ) ) echo 修改完毕! pause>nul 多谢!


2008-5-13 13:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 15 楼』:  

@echo off for /f "tokens=1* delims==" %%i in (config.ini) do call:lp "%%i" "%%j" echo 修改完毕! pause>nul goto :eof :lp if %1=="publish" echo publish=Y>config.ini&goto :eof if %1=="publishDateTime" echo publishDateTime=%date:~,4%%date:~5,2%%date:~8,2%%time:~,2%%time:~3,2%>>config.ini&goto :eof if %1=="update" echo update=Y>>config.ini&goto :eof if %1=="updateDateTime" echo updateDateTime=%date:~,4%%date:~5,2%%date:~8,2%%time:~,2%%time:~3,2%>>config.ini&goto :eof >>config.ini echo %~1=%~2


   此帖被 +1 点积分    点击查看详情   
评分人:【 westwind 分数: +1  时间:2008-5-13 14:38




简单!简单!再简单!
2008-5-13 14:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
<<   [1] [2]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: