中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-03 10:53
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]笨丫头想不出问题,批处理xml文件 查看 1,398 回复 13
楼 主 [求助]笨丫头想不出问题,批处理xml文件 发表于 2007-02-16 11:17 ·  中国 上海 电信
初级用户
积分 147
发帖 20
注册 2003-01-11 00:00
23年会员
UID 725
性别 女
状态 离线
欲做一批处理,将xml文件中的某一字符替换,

xml文件中的代码:


……

……

……

grid_menu_bg="xin003.jpg"/>

……

……

……

欲在grid_menu_bg="xin003.jpg" 后边添加代码idle_status_area_bg="spacer.png" idle_softkey_area_bg="spacer.png"/>


既,批处理后的代码是 :



grid_menu_bg="xin003.jpg" idle_status_area_bg="spacer.png" idle_softkey_area_bg="spacer.png"/>


啊:把:
grid_menu_bg="xin003.jpg"/> 改成 grid_menu_bg="xin003.jpg" idle_status_area_bg="spacer.png" idle_softkey_area_bg="spacer.png"/>


可代码中的 xin003.jpg 的 xin003 是随机的,


呵呵,我知道很高难度~~~~~
2 发表于 2007-02-16 22:29 ·  中国 浙江 台州 温岭市 电信
高级用户
★★
DOS学徒
积分 526
发帖 252
注册 2007-02-12 05:35
19年会员
UID 79286
性别 男
状态 离线
不会但还是顶了
3 发表于 2007-02-16 22:48 ·  美国 缅因州
中级用户
★★
积分 316
发帖 152
注册 2006-06-18 13:01
20年会员
UID 57204
性别 男
状态 离线
发一段你的xml代码上来,这样看不出规律,没法帮你
4 发表于 2007-02-17 00:47 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
有这个grid_menu_bg的行?
5 发表于 2007-02-17 02:53 ·  中国 黑龙江 哈尔滨 电信
高级用户
★★★
积分 760
发帖 357
注册 2005-10-10 22:33
20年会员
UID 43332
状态 离线
@echo off
:00
SET 字符串=grid_menu_bg
strings 新字符串=READ 新字符串.TXT,1
SET 文件名=xml
SET 新文件=新文件.TXT
SET 取字符串数=1,25
SET 行数=1
:11
SET X=>NUL
strings x=read %文件名%,行数
if "x"=="" goto 退出
strings 行数=add %行数%,1
ECHO %X%|FIND /I "%字符串%">NUL
if ERRORLEVEL 1 goto 写旧文件
:写新文件
STRINGS X=MID %X%,%取字符串数%
ECHO %X%%新字符串%>>%新文件%
GOTO 11
:写旧文件
ECHO %X%>>%新文件%
GOTO 11
:退出
for %%x in (X 字符串 新字符串 文件名 新文件 取字符串数 行数) do SET %%x=>NUL
CLS
ECHO 工作已经完成,请验收!

[ Last edited by 0451lym on 2007-2-17 at 08:06 AM ]
6 发表于 2007-02-17 07:04 ·  中国 广西 南宁 中移铁通
初级用户
积分 147
发帖 20
注册 2003-01-11 00:00
23年会员
UID 725
性别 女
状态 离线
文件里的代码是没有规律的,所出现的常量一样,但数值不一样的。

abc..xml文件的代码如下(一个给手机做主题的代码,其中的图片文件名是随机的,不用修改,只是改一部分,添加一些代码,就是在红色部分的代码中添加,):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE theme PUBLIC "-//NOKIA//DTD THEME 2.0//EN" "theme.dtd">
<theme name="chun1" version="2.0">
<colors
display="main"
status_area_font_color="0x0"
calendar_highlight_color="0xccffcc" />
<wallpaper
main_display_graphics="026.jpg" />
<screensaver
main_display_graphics="025.jpg" />
<background
main_default_bg="xin003.jpg"
grid_menu_bg="xin003.jpg" />
<calendar_bg
january="xin003.jpg"
february="xin003.jpg"
march="xin003.jpg"
april="xin003.jpg"
may="xin003.jpg"
june="xin003.jpg"
july="xin003.jpg"
august="xin003.jpg"
september="xin003.jpg"
october="xin003.jpg"
november="xin003.jpg"
december="xin003.jpg" />
<highlight
list="32.png" />
<startup
main_display_graphics="026.jpg" />
<shutdown
main_display_graphics="026.jpg" />
<transformation_open
main_display_graphics="026.jpg" />
<transformation_close
main_display_graphics="026.jpg" />
</theme>



使 grid_menu_bg="xin003.jpg" /> 变为 grid_menu_bg="xin003.jpg" idle_status_area_bg="spacer.png" idle_softkey_area_bg="spacer.png" />

注:黑色部分是要添加的代码,

其中 grid_menu_bg= 后的 "xin003.jpg" 可能是 "xin066.jpg" 或是 "xin055.jpg" 或是别的什么图片格式的文件,不用改~~~
7 发表于 2007-02-17 07:37 ·  中国 黑龙江 哈尔滨 电信
高级用户
★★★
积分 760
发帖 357
注册 2005-10-10 22:33
20年会员
UID 43332
状态 离线
晕,这么简单的东西还没弄明白?
都已经给你写的很完美了.开头的改一下就可以了.
SET 字符串=grid_menu_bg
strings 新字符串=READ 新字符串.TXT,1
SET 文件名=xml
SET 新文件=新文件.TXT
SET 取字符串数=1,25
SET 行数=1

-----------------------------------------------------------
在创建一个新的文件取名叫"新字符串.TXT",在里面把
idle_status_area_bg="spacer.png" idle_softkey_area_bg="spacer.png" />
写进去就可以了

[ Last edited by 0451lym on 2007-2-17 at 08:07 AM ]
8 发表于 2007-02-17 08:02 ·  中国 黑龙江 哈尔滨 电信
高级用户
★★★
积分 760
发帖 357
注册 2005-10-10 22:33
20年会员
UID 43332
状态 离线
给你解释解释批处理的意思!
蓝色的部分为著译.


@echo off
:00
REM 把要找的内容设置变量,取其最为独特的字符串,不一定是全部
SET 字符串=grid_menu_bg
REM 把要加入的字符串设置为变量,需要先在新字符串.TXT中写入完整字符串
strings 新字符串=READ 新字符串.TXT,1
REM 把要修改的文件设置为变量
SET 文件名=xml
REM 把修改后的文件设置为变量
SET 新文件=新文件.TXT
REM 原文件中要截取保留的字符串内容
SET 取字符串数=1,25
REM 设置原始文件开始行数为1
SET 行数=1
:11
REM 清空变量X
SET X=>NUL
REM 读取原文件的某行,设置为变量X
strings x=read %文件名%,行数
REM 如果读取为最后一行,那么退出
if "x"=="" goto 退出
REM 设置行数加1,即确定下一次读取的下一行
strings 行数=add %行数%,1
REM 检查变量X中有没有需要修改的字符串行
ECHO %X%|FIND /I "%字符串%">NUL
REM 如果没有,那么跳转到写旧文件标记
if ERRORLEVEL 1 goto 写旧文件
:写新文件
REM X中有所需要修改的字符串行,取得所要保留的字符串部分
STRINGS X=MID %X%,%取字符串数%
REM 把保留的字符串部分和需要加入的字符串部分写入到新文件
ECHO %X%%新字符串%>>%新文件%
GOTO 11
:写旧文件
REM 把不需要修改的旧文件行写入到新文件
ECHO %X%>>%新文件%
GOTO 11
:退出
REM 清除所有变量
for %%x in (X 字符串 新字符串 文件名 新文件 取字符串数 行数) do SET %%x=>NUL
CLS
ECHO 工作已经完成,请验收!

[ Last edited by 0451lym on 2007-2-17 at 08:05 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
fastslz +3 2007-02-20 09:28
9 发表于 2007-02-17 08:49 ·  中国 上海 电信
新手上路
积分 12
发帖 6
注册 2007-02-17 07:59
19年会员
UID 79683
性别 男
状态 离线
对啊?我一点都不会,第一次发帖,开始学习了
10 发表于 2007-02-17 14:00 ·  中国 广西 南宁 中移铁通
初级用户
积分 147
发帖 20
注册 2003-01-11 00:00
23年会员
UID 725
性别 女
状态 离线
5555 5555 5555 :(:( 0451lym 大叔 不对呀~~~


进入了一个死循环,且出现的 新文件.TXT 的内容是:
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
……

下边的附件就是那文件,麻烦大师测试一下~~~~ 俺笨~~~~ 有劳您了~~~~~ :( :(

[ Last edited by 米娜 on 2007-2-17 at 04:23 PM ]
附件
theme_descriptor.rar (528 bytes, 下载附件所需积分 1 点, 下载次数: 5)
11 发表于 2007-02-18 07:13 ·  中国 四川 成都 电信
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
20年会员
UID 42173
性别 男
状态 离线
笨丫头想不出问题 系列主题~~~

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
12 发表于 2007-02-19 15:45 ·  中国 广西 玉林 中移铁通
初级用户
积分 147
发帖 20
注册 2003-01-11 00:00
23年会员
UID 725
性别 女
状态 离线
是 主题系列
13 发表于 2007-02-23 01:40 ·  中国 宁夏 银川 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
sed -r "/^[ ]*grid_menu_bg=\x22xin([0-9]{3})\.jpg\x22[ ]*\/>[ ]*$/!d;s/\/>/idle_status_area_bg=\x22spacer.png\x22 idle_softkey_area_bg=\x22spacer.png\x22 &/" life

只适合这个
14 发表于 2007-02-23 08:28 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
如果用3方建议用UE~去编辑下~用正则表达式很快的。。。
论坛跳转: