中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 18:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批量修改文件中的空行问题
楼 主 批量修改文件中的空行问题 发表于 2006-11-23 07:38 ·  中国 北京 联通
新手上路
积分 14
发帖 5
注册 2006-11-23 06:44
UID 71449
性别 男
状态 离线
我想用一段代码实现批量修改*.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 发表于 2006-11-23 08:47 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
btandd兄最好将你出问题的.XML文件内容传或是贴上来让大家看看,才好正确无误的帮你测试~:)
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
3 发表于 2006-11-23 14:28 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

  可以先判断.xml文件的某一行里面时候存在"300",如果有就处理它,如果没有就跳过去。
4 发表于 2006-11-23 22:17 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
UID 42843
性别 男
来自 四川南充
状态 离线
@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)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
btandd +1 2006-11-23 23:26
5 发表于 2006-11-23 22:59 ·  中国 北京 联通
新手上路
积分 14
发帖 5
注册 2006-11-23 06:44
UID 71449
性别 男
状态 离线
Originally posted by 不得不爱 at 2006-11-23 09:17 AM:
@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! ...


不得不爱是个好同志!正解。能否解释一下为什么会出现这种情况?另外,我发现替换完的文件中,每一行前面的空格都被删除掉了,能否避免这种情况?
6 发表于 2006-11-23 23:08 ·  中国 北京 联通
新手上路
积分 14
发帖 5
注册 2006-11-23 06:44
UID 71449
性别 男
状态 离线
还有一个问题,就是如果替换的是需要转义的字符,比如<,>这类字符,好像就没法正常工作了,怎么转义呢?
7 发表于 2006-11-25 03:15
中级用户
★★
DOS之日
积分 337
发帖 161
注册 2006-11-04 05:27
UID 69523
性别 男
状态 离线
首先说一下空行和空格问题,如下代码:


  1. @echo off
  2. echo --------------------------
  3. for /f %%i in (a.xml) do echo --"%%i"--
  4. echo --------------------------
  5. for /f "tokens=*" %%i in (a.xml) do echo --"%%i"--
  6. echo --------------------------
  7. for /f "tokens=* delims=" %%i in (a.xml) do echo --"%%i"--
  8. echo --------------------------
  9. for /f "tokens=* delims=/" %%i in (a.xml) do echo --"%%i"--
  10. echo --------------------------
  11. pause
hxuan?表ー: 2006-11-24 11:22

  四个FOR中,第一个结果是a.xml文件中的所有空行,空格行及跳格符都不输出,并且每行中只输出了第一个空格和空格,空格和跳格,跳格和跳格之间的字符,也就是说默认以空格及跳格符为分格符,且只输出了分隔后的第一个内容,此时用%%j也不可输出第二个内容.
  第二个结果是空行不输出,空格行变成了空行输出,跳格行变成了空行输出,并且每行最前面的空格和跳格也不输出了,这也是为什么空格行和跳格行成了空行.
  第三个结果没有输出空行,其它是按原样输出了.
  第四个和第三个一样的结果,这果的分隔符可以改成其它的一样,当然除了一些特殊的字符.
所以,空格和跳格主要是分隔符的问题,可以解决.
代码修改如下:


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a a=1
  4. for %%x in (*.xml) do (
  5. for /f "tokens=* delims=" %%i in (%%x) do (
  6. set "var=%%i"
  7. set "var=!var:300=100!"
  8. echo.!var!>>!a!.xml.love
  9. )
  10. set /a a=!a!+1
  11. )
hxuan?表ー: 2006-11-24 13:33


再说一下空行.1楼的

该脚本是要替换某目录下xml文本中的300为100。脚本能够正确修改,但是如果遇到空行(比如只有一个回车符,或者还有其它空格符,跳格符),空行会被替换成“300=100”,很郁闷,请教解决方案!谢谢啦!


   好像不是空行会被替换成“300=100”,而是空格行和跳格行才对,空行就没有输出.
   执行如下代码:


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=1
  4. for /f "tokens=* delims=" %%i in (a.xml) do (
  5. echo --!a!--%%i--
  6. set /a a+=1
  7. )
  8. pause
hxuan?表ー: 2006-11-24 14:10


结果是,FOR的选项怎么样设置,空行都不会输出.其实空行就没有被读取,直接跳过了.所以4楼的代码也是错误的,空行还是没有输出的.

   我也是新手,说的不对的请高手指点一下,另外哪位高手可以解决一下空行的问题,我也想请教一下.

[ Last edited by hxuan999 on 2006-11-24 at 03:21 PM ]
for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
8 发表于 2006-11-25 03:33 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
UID 42843
性别 男
来自 四川南充
状态 离线
9 发表于 2006-11-25 03:40 ·  中国 北京 朝阳区 联通
高级用户
★★
朦胧的世界
积分 579
发帖 218
注册 2006-10-24 04:29
UID 67972
状态 离线
加上findstr /v /n . a.xml 对空行的判断就可以了!

认识自己,降伏自己,改变自己
,才能改变别人!
10 发表于 2006-11-25 04:24
中级用户
★★
DOS之日
积分 337
发帖 161
注册 2006-11-04 05:27
UID 69523
性别 男
状态 离线
Originally posted by 不得不爱 at 2006-11-24 15:33:
4楼的代码不是错误的,那是去处了纯空格行的代码


没错,本身是没错,只是去了空格行.可是解决不了本贴的问题呀.



楼上的,

加上findstr /v /n . a.xml 对空行的判断就可以了!


我不熟悉FINDSTR,可否写出你的代码来,谢谢了.

[ Last edited by hxuan999 on 2006-11-24 at 04:27 PM ]
for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
11 发表于 2006-11-25 06:36
中级用户
★★
DOS之日
积分 337
发帖 161
注册 2006-11-04 05:27
UID 69523
性别 男
状态 离线
如何把文本最后一行保存为另一文本?
看到了这个贴,找到了解决方法,先谢过9楼.


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a a=1
  4. for %%x in (*.xml) do (
  5. for /f "tokens=1* delims=:" %%i in ('findstr /n .* %%x') do (
  6. set "var=.%%j"
  7. set "var=!var:300=100!"
  8. echo.!var:~1!>>!a!.xml.love
  9. )
  10. set /a a=!a!+1
  11. )
hxuan?表ー: 2006-11-24 17:36

这样空行的问题也就解决了.

[ Last edited by hxuan999 on 2006-11-24 at 06:38 PM ]
for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
论坛跳转: