[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理文本替换字符遇到转义字符怎么办?

在改装系统安装盘时想处理一个luna.the文本,改两处:

一是把其中的Wallpaper.MUI=@themeui.dll,-2036一行删除(这个做到了),

二是它上一行“Wallpaper=%WinDir%web\wallpaper\Bliss.bmp” 改成:
“Wallpaper=%WinDir%web\wallpaper\Bliss.jpg”。

问题出在二上了。用批处理语句修改时文本碰到转义字符问题:%WinDir%被识别为c:\windows,输出变成Wallpaper=c:\windows\web\wallpaper\Bliss.bmp,命令无法执行下去。

看了N多DOS帮助,查了不少资料、贴子,都没弄会,请达人指教。最好给个完整的语句,先谢谢啦!

原文本全部内容如下:

; Copyright ?Microsoft Corp. 1995-2001

[Theme]
DisplayName=@themeui.dll,-2017

; My Computer
[CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon]
DefaultValue=%WinDir%explorer.exe,0

; My Documents
[CLSID\{450D8FBA-AD25-11D0-98A8-0800361B1103}\DefaultIcon]
DefaultValue=%WinDir%SYSTEM32\mydocs.dll,0

; My Network Places
[CLSID\{208D2C60-3AEA-1069-A2D7-08002B30309D}\DefaultIcon]
DefaultValue=%WinDir%SYSTEM32\shell32.dll,17

; Recycle Bin
[CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon]
full=%WinDir%SYSTEM32\shell32.dll,32
empty=%WinDir%SYSTEM32\shell32.dll,31




[Control Panel\Cursors]
Arrow=
Help=
AppStarting=
Wait=
NWPen=
No=
SizeNS=
SizeWE=
Crosshair=
IBeam=
SizeNWSE=
SizeNESW=
SizeAll=
UpArrow=
DefaultValue=Windows default
DefaultValue.MUI=@themeui.dll,-2043

[Control Panel\Desktop]
Wallpaper=%WinDir%web\wallpaper\Bliss.jpg
Wallpaper.MUI=@themeui.dll,-2036
TileWallpaper=0
WallpaperStyle=2
Pattern=
ScreenSaveActive=1



[VisualStyles]
Path=%ResourceDir%\Themes\luna\luna.msstyles
ColorStyle=NormalColor
Size=NormalSize


[boot]
SCRNSAVE.EXE=%WinDir%\System32\logon.scr


[MasterThemeSelector]
MTSM=DABJDKT
ThemeColorBPP=8
Sample Text

[ 本帖最后由 stance 于 2010-11-29 00:58 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

楼主最好把你的代码贴出来
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

代码越改越乱,现在是这个样子的,新加了好多%也没用:
  1. for /f "tokens=* delims=" %%i in ('type %DestinationCD%\I386\LUNA.THE.TMP^|findstr /v "Wallpaper.MUI=@themeui.dll,-2036"') do
  2. (
  3.         setlocal enabledelayedexpansion
  4.         set bliss=%%%%Wallpaper=%WinDir%web\wallpaper\Bliss.bmp%%
  5.         for %%j in (%%i) do if %%j==%bliss% set !j=%WinDir%web\wallpaper\Bliss.jpg!&echo %j%>>%DestinationCD%\I386\LUNA.TMP else echo %%j>>%DestinationCD%\I386\LUNA.TMP
  6.         endlocal
  7. )
复制代码
对字符处理一直很头痛。。。。

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%DestinationCD%\I386\LUNA.THE.TMP"') do (
  3.       if "%%b"=="" (echo/) else (
  4.             set b=%%b
  5.             if /i not "!b:~0,14!"=="Wallpaper.MUI=" (
  6.                    if /i not "!b:~0,10!"=="Wallpaper=" (echo %%b) else (
  7.                         set b=!b:.bmp=.jpg!
  8.                         echo !b!
  9. )))))>"%DestinationCD%\I386\LUNA.TMP"
复制代码

[ 本帖最后由 hanyeguxing 于 2010-11-29 00:00 编辑 ]
1

评分人数

    • stance: 感谢热心帮助技术 + 1
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

谢谢  hanyeguxing!认真拜读了N遍,太受教益了。
应该自己学会才行的,不过,急着用,再对您的代码执行情况提个问题,系统提示:

——系统找不到文件 'findstr /n .* "C:\XP\XP_SP.HotFix\I386\LUNA.THE.TMP"。

仔细查找原因,发现'findstr /n .* "%DestinationCD%\I386\LUNA.THE.TMP"一句缺少右边的 ' 号。加上再试,还是一样。

猜想是不是这一句被批处理当作一个文本字符串对待了?——注意到,即使在语句中加了右 ' ,系统提示中也是有左 ' 没右 ' 的。


——我是在XP SP3环境下测试的。

[ 本帖最后由 stance 于 2010-11-28 23:50 编辑 ]

TOP

4楼的代码是同时保留空行的,如果不保留,则可以:
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "usebackq eol=寒 delims=" %%b in ("%DestinationCD%\I386\LUNA.THE.TMP") do (
  3.             set b=%%b
  4.             if /i not "!b:~0,14!"=="Wallpaper.MUI=" if /i not "!b:~0,10!"=="Wallpaper=" (echo %%b) else (
  5.                         set b=!b:.bmp=.jpg!
  6.                         echo !b!
  7. )))>"%DestinationCD%\I386\LUNA.TMP"
复制代码

[ 本帖最后由 hanyeguxing 于 2010-11-29 00:21 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

4楼的代码没有产生LUNA.TMP文件,6楼的产生了。但内容不对,显示如下:

ECHO 处于关闭状态。

ECHO 处于关闭状态。

ECHO 处于关闭状态。

ECHO 处于关闭状态。

ECHO 处于关闭状态。

……

系统没有错误提示,也没有显示执行的过程。正在找原因。。。

[ 本帖最后由 stance 于 2010-11-29 00:16 编辑 ]

TOP

你对4、6楼的代码重新测试看看
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

再试,两个都成功了!

非常奇怪,同样的代码,为什么前面的测试都不正确呢?——大概是我的系统环境设置问题吧。

不管怎么说,衷心感谢 hanyeguxing,感谢批处理之家!

代码中还有些不懂的地方,继续学习。

[ 本帖最后由 stance 于 2010-11-29 00:59 编辑 ]

TOP

昨天给忘记给hanyeguxing加分了,今天特地来补分,可系统提示说超过24小时的加分限制。
先欠着吧,反正我的权限一次只能评1分。以后把分攒多了时多多给你加。呵呵!

TOP

返回列表