![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 14:08 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 批量修改文件中的空行问题 |
| 可打印版本 3,055 / 10 |
| 第1楼 btandd | 发表于 2006-11-23 07:38 |
| 新手上路 发帖 5 积分 14 | |
|
批量修改文件中的空行问题 我想用一段代码实现批量修改*.xml文件中某部分内容,脚本如下
@echo off setlocal enabledelayedexpansion set /a a=1 for %%x in (*.xml) do ( for /f "tokens=*" %%i in (%%x) do ( set var=%%i set "var=!var:300=100!" echo !var!>>!a!.xml.love ) set /a a=!a!+1 ) 该脚本是要替换某目录下xml文本中的300为100。脚本能够正确修改,但是如果遇到空行(比如只有一个回车符,或者还有其它空格符,跳格符),空行会被替换成“300=100”,很郁闷,请教解决方案!谢谢啦! |
|
| 第2楼 redtek | 发表于 2006-11-23 08:47 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
btandd兄最好将你出问题的.XML文件内容传或是贴上来让大家看看,才好正确无误的帮你测试~:)
|
|
| 第3楼 lxmxn | 发表于 2006-11-23 14:28 |
| 版主 发帖 4,938 积分 11,386 | |
|
可以先判断.xml文件的某一行里面时候存在"300",如果有就处理它,如果没有就跳过去。 |
|
| 第4楼 不得不爱 | 发表于 2006-11-23 22:17 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
@echo off
setlocal enabledelayedexpansion set /a a=1 for %%x in (*.xml) do ( for /f "tokens=*" %%i in (%%x) do (set "var=%%i" if not !var!.==. (set "var=!var:300=100!" echo !var!!>>!a!.xml.love)) set /a a=!a!+1) |
|
| 第5楼 btandd | 发表于 2006-11-23 22:59 |
| 新手上路 发帖 5 积分 14 | |
Originally posted by 不得不爱 at 2006-11-23 09:17 AM: 不得不爱是个好同志!正解。能否解释一下为什么会出现这种情况?另外,我发现替换完的文件中,每一行前面的空格都被删除掉了,能否避免这种情况? |
|
| 第6楼 btandd | 发表于 2006-11-23 23:08 |
| 新手上路 发帖 5 积分 14 | |
|
还有一个问题,就是如果替换的是需要转义的字符,比如<,>这类字符,好像就没法正常工作了,怎么转义呢?
|
|
| 第7楼 hxuan999 | 发表于 2006-11-25 03:15 |
| 中级用户 发帖 161 积分 337 | |
|
首先说一下空行和空格问题,如下代码:
四个FOR中,第一个结果是a.xml文件中的所有空行,空格行及跳格符都不输出,并且每行中只输出了第一个空格和空格,空格和跳格,跳格和跳格之间的字符,也就是说默认以空格及跳格符为分格符,且只输出了分隔后的第一个内容,此时用%%j也不可输出第二个内容. 第二个结果是空行不输出,空格行变成了空行输出,跳格行变成了空行输出,并且每行最前面的空格和跳格也不输出了,这也是为什么空格行和跳格行成了空行. 第三个结果没有输出空行,其它是按原样输出了. 第四个和第三个一样的结果,这果的分隔符可以改成其它的一样,当然除了一些特殊的字符. 所以,空格和跳格主要是分隔符的问题,可以解决. 代码修改如下:
再说一下空行.1楼的
好像不是空行会被替换成“300=100”,而是空格行和跳格行才对,空行就没有输出. 执行如下代码:
结果是,FOR的选项怎么样设置,空行都不会输出.其实空行就没有被读取,直接跳过了.所以4楼的代码也是错误的,空行还是没有输出的. 我也是新手,说的不对的请高手指点一下,另外哪位高手可以解决一下空行的问题,我也想请教一下. [ Last edited by hxuan999 on 2006-11-24 at 03:21 PM ] |
|
| 第8楼 不得不爱 | 发表于 2006-11-25 03:33 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
4楼的代码不是错误的,那是去处了纯空格行的代码
|
|
| 第9楼 tao0610 | 发表于 2006-11-25 03:40 |
| 高级用户 发帖 218 积分 579 | |
|
加上findstr /v /n . a.xml 对空行的判断就可以了!
|
|
| 第10楼 hxuan999 | 发表于 2006-11-25 04:24 |
| 中级用户 发帖 161 积分 337 | |
Originally posted by 不得不爱 at 2006-11-24 15:33: 没错,本身是没错,只是去了空格行.可是解决不了本贴的问题呀. 楼上的,
我不熟悉FINDSTR,可否写出你的代码来,谢谢了. [ Last edited by hxuan999 on 2006-11-24 at 04:27 PM ] |
|
| 第11楼 hxuan999 | 发表于 2006-11-25 06:36 |
| 中级用户 发帖 161 积分 337 | |
|
如何把文本最后一行保存为另一文本?
看到了这个贴,找到了解决方法,先谢过9楼.
这样空行的问题也就解决了. [ Last edited by hxuan999 on 2006-11-24 at 06:38 PM ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |