中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-08 20:25
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理怎样修改文件里的内容 查看 2,297 回复 17
楼 主 批处理怎样修改文件里的内容 发表于 2008-05-13 11:14 ·  中国 广东 深圳 罗湖区 电信
初级用户
积分 72
发帖 28
注册 2008-04-17 15:33
18年会员
UID 116157
性别 男
状态 离线
我现在有个配置文件config.ini,内容是:
update=N
updateDateTime=200804180912
Backup=N
BackupDateTime=200804180912
DeleteBak=N
DateTimeByDel=200802180912
FallBack=N
DateTimeByFallback=200802180912

想通过一个批处理,修改其中的某些参数的值,如令update=Y,
updateDateTime=当前时间,不想通过建临时文件--->删旧的--->临时文件重命名的方法实现,直接在config.ini里面改,其他的值不变。
谢了!
2 发表于 2008-05-13 11:59 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@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%
3 发表于 2008-05-13 12:10 ·  中国 江苏 苏州 吴江区 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
批处理

@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-05-13 12:52
4 我也来一个: 发表于 2008-05-13 12:15 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

@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
5 发表于 2008-05-13 12:16 ·  中国 江苏 苏州 吴江区 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
晕。我那就不是纯的啊~!
6 发表于 2008-05-13 12:19 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
回楼上,我发了才发现你已经发了。
如文件只是固定修改前两行的话就可以简化如下:

@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
7 发表于 2008-05-13 12:22 ·  中国 广东 深圳 罗湖区 电信
初级用户
积分 72
发帖 28
注册 2008-04-17 15:33
18年会员
UID 116157
性别 男
状态 离线
huahua0919的不行啊,执行了没反映,zw19750516的运行完之后,config.ini文件里其他的数据都没了,只剩
update=y
DateTimeByFallback=200802180912
zw19750516的第2个版本运行后,config.ini没有变化。。

[ Last edited by westwind on 2008-5-13 at 12:28 PM ]
8 发表于 2008-05-13 12:27 ·  中国 江苏 苏州 吴江区 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
你再试试,我改了,是编辑的问题
9 发表于 2008-05-13 12:33 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
我开始是粗心(老是这个问题)把config.ini打成confing.ini了,请再测试
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
westwind +1 2008-05-13 12:52
批处理之家新域名:www.bathome.net
10 发表于 2008-05-13 12:38 ·  中国 广东 深圳 罗湖区 电信
初级用户
积分 72
发帖 28
注册 2008-04-17 15:33
18年会员
UID 116157
性别 男
状态 离线
都OK!
感谢huahua0919和zw19750516的热心解答!
学习。~
11 发表于 2008-05-13 12:40 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
要想用纯P把时间转换成200804180912这种格式,又要考虑通用性,是比较困难的。
12 最终修正版: 发表于 2008-05-13 12:44 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
修正当前时间格式

@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
13 发表于 2008-05-13 13:06 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
我觉得纯P如果不通过读注册表判断日期/时间格式,是很难写出通用的代码的。
14 发表于 2008-05-13 13:08 ·  中国 广东 深圳 罗湖区 电信
初级用户
积分 72
发帖 28
注册 2008-04-17 15:33
18年会员
UID 116157
性别 男
状态 离线
想问下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

多谢!
15 发表于 2008-05-13 14:29 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@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-05-13 14:38
简单!简单!再简单!
论坛跳转: