Board logo

标题: [已解决]替换文本内第五行双引号内的字符 [打印本页]

作者: tireless     时间: 2008-9-8 12:52    标题: [已解决]替换文本内第五行双引号内的字符

· 替换第5行双引号内的文字
· 第1行是空行
· 运行效果:提示用户输入,然后替换。

文件名是test.rc,内容如下:(其实那是修改“开始”按钮文字:))

  Quote:
STRINGTABLE
LANGUAGE LANG_CHINESE, 0x2
{
578,         "开始"
579,         "产生内部错误,正在使用的一个窗口已被关闭。"
580,         "限制"
581,         "本次操作由于这台计算机的限制而被取消。请与您的系统管理员联系。"
590,         "隐藏您的不活动的通知图标..."
591,         "要查看隐藏的图标,请单击此按钮。"
}

[ Last edited by tireless on 2008-9-9 at 05:31 AM ]
作者: hackate     时间: 2008-9-8 13:00
你最好能把文本内容发上来..
不知道你第五行的具体情况。不好处理
作者: slore     时间: 2008-9-8 14:11
。。。改SHELL呀。。。
作者: tireless     时间: 2008-9-8 14:38


  Quote:
Originally posted by slore at 2008-9-7 06:11 PM:
。。。改SHELL呀。。。

我就问这个问题。。。

其实我可以在命令行下修改开始文字,等着瞧吧。先告诉我这个
作者: slore     时间: 2008-9-8 14:47
shell都不知道改几年了。。。还是5个英文最合适哦(Slore),其他的都不好看,现在主题多也没有设置开始的字样显示了。


你echo前4行然后把第5行echo下,在把下面echo下。不可以麽?
作者: HAT     时间: 2008-9-8 15:01

@echo off
set /p newname=请输入:
change "test.rc" /from \034* /to \034%newname%\034 /lines 5-5

作者: tireless     时间: 2008-9-8 15:21    标题: reply #5

试了,可以。

可不一定每个人的explore.exe的37号stringtable都相同,有英文、简体/繁体中文...
=========================
很奇怪,对 explorer.exe,Resource Hacker 不能覆盖修改它。(更奇怪的是,“开始”文字却会变,但重启explorer.exe 文字又变回原来的(我都把 c:\WINDOWS\system32\dllcache\explorer.exe 给重命名了。。。)
作者: tireless     时间: 2008-9-8 15:42
---

[ Last edited by tireless on 2008-11-14 at 23:40 ]
作者: tireless     时间: 2008-9-8 17:32


  Quote:
Originally posted by HAT at 2008-9-7 07:01 PM:
@echo off
set /p newname=请输入:
change "test.rc" /from \034* /to \034%newname%\034 /lines 5-5

如果输入的文字带空格,好像会出错。
作者: HAT     时间: 2008-9-8 21:16    标题: Re 9楼


@echo off
set /p newname=请输入:
change "test.rc" /from "\034*" /to "\034%newname%\034" /lines 5-5
[ Last edited by HAT on 2008-9-8 at 09:18 PM ]
作者: tireless     时间: 2008-9-8 21:26
空格问题解决了。

===============================

还有输入的文字太长也不行,比如输入:

111111111111111111111111111111111111111111111111111111111111111111111111



离离原上草,一岁一枯荣。野火烧不尽,春风吹又生。远芳侵古道,晴翠接荒城。又送王孙去,萋萋满别情。

这个跟change.exe有关吧。有没有其他工具可以替换文字的。(PS:这类工具真的好难懂。。。)

[ Last edited by tireless on 2008-9-8 at 01:33 AM ]
作者: HAT     时间: 2008-9-8 21:38

@echo off
type nul>"test.tmp"
set /p newname=请输入:
sed "5s/\".*\"/\"%newname%\"/" "test.rc">>"test.tmp"
move /y "test.tmp" "test.rc"

作者: slore     时间: 2008-9-9 13:17
可不一定每个人的explore.exe的37号stringtable都相同,有英文、简体/繁体中文...

你把你得到RC文本读取前4行输出回去,然后在自己输出个第5行,然后skip=5输出后面,或者直接more输出个新的都是很容易的,和你里面是啥没有关系。


PS:VBS提供了很多字符串的操作函数。

PS又PS:建议修改注册表winlogon下的shell重定向explorer而不用替换原系统文件。
作者: tireless     时间: 2008-9-9 21:31


  Quote:
Originally posted by slore at 2008-9-8 05:17 PM:
你把你得到RC文本读取前4行输出回去

如何读取前4行?
作者: HAT     时间: 2008-9-9 21:42    标题: Re 14楼


@echo off
setlocal enabledelayedexpansion
set count=0
for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* "a.txt"') do (
  echo.%%b
  set /a count+=1
  if !count! equ 4 goto :eof
)

作者: tireless     时间: 2008-9-9 22:09    标题: Re 15楼

看不懂。又如何使用?
作者: HAT     时间: 2008-9-9 22:25

@echo off
setlocal enabledelayedexpansion
set count=0
set /p newname=请输入:
type nul>"test.bak"
for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* "test.rc"') do (
  >>"test.bak" echo.%%b
  set /a count+=1
  if !count! equ 4 goto :next
)
goto :eof
:next
>>"test.bak" echo 578,         "%newname%"
for /f "skip=5 tokens=1,2* delims=:" %%a in ('findstr /n .* "test.rc"') do (
  >>"test.bak" echo.%%b
)
move /y "test.bak" "test.rc"

作者: tireless     时间: 2008-9-9 23:16
有个很奇怪的问题,如果直接回车,只有第一次修改有效,修改几次后,直接回车就不能修改了。用tskill explorer 重启explorer.exe后的第一次直接回车有效,然后直接回车无效。

[ Last edited by tireless on 2008-9-9 at 04:01 AM ]
作者: HAT     时间: 2008-9-9 23:22

@echo off
setlocal enabledelayedexpansion
set count=0
set newname=
:begin
set /p newname=请输入:
if "%newname%" equ "" (
  echo 输入不能为空
  goto :begin
)
type nul>"test.bak"
for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* "test.rc"') do (
  >>"test.bak" echo.%%b
  set /a count+=1
  if !count! equ 4 goto :next
)
goto :eof
:next
>>"test.bak" echo 578,         "%newname%"
for /f "skip=5 tokens=1,2* delims=:" %%a in ('findstr /n .* "test.rc"') do (
  >>"test.bak" echo.%%b
)
move /y "test.bak" "test.rc"

作者: tireless     时间: 2008-9-9 23:36
不是的,输入其他的不会出错。

只是直接回车不总是有效(只有第一次修改直接回车能替换成空字符,之后就不能替换成空字符了。直到用 tskill explorer 重启explorer后的第一次又可以替换...)

替换成空的很有用,因为这样开始按钮就会消失:D,所以可否修复这个"BUG"?

[ Last edited by tireless on 2008-9-9 at 04:00 AM ]
作者: HAT     时间: 2008-9-9 23:43
经测试,17楼的代码不管第几次回车,总是能够正确替换test.rc的内容。
至于你说的“之后就不能替换成空字符了”,能描述一下你是怎样测试的不?
作者: tireless     时间: 2008-9-10 00:08


  Quote:
Originally posted by HAT at 2008-9-9 03:43 AM:
经测试,17楼的代码不管第几次回车,总是能够正确替换test.rc的内容。
至于你说的“之后就不能替换成空字符了”,能描述一下你是怎样测试的不?

对,没错。

但我是用来替换开始按钮后,就有问题,情况是:
第一次直接回车(替换开始按钮)
第二次随便输入(替换开始按钮)
然后用下面的批处理测试
@echo off
set /p newname=请输入:
echo %newname%
pause

出现的情况是,当我直接回车,%newname%就会变为上次的输入。真是诡异~

[ Last edited by tireless on 2008-9-9 at 04:24 AM ]
作者: tireless     时间: 2008-9-10 00:14
要不我把附件传上来,你测试下,就按照上面说的三步测试

http://clip2net.com/page/m316/316874

[ Last edited by tireless on 2008-9-9 at 04:18 AM ]
作者: HAT     时间: 2008-9-10 01:18
给17楼的代码加个变量初始化吧
@echo off
setlocal enabledelayedexpansion
set count=0
set newname=
set /p newname=请输入:
type nul>"test.bak"
for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* "test.rc"') do (
  >>"test.bak" echo.%%b
  set /a count+=1
  if !count! equ 4 goto :next
)
goto :eof
:next
>>"test.bak" echo 578,         "%newname%"
for /f "skip=5 tokens=1,2* delims=:" %%a in ('findstr /n .* "test.rc"') do (
  >>"test.bak" echo.%%b
)
move /y "test.bak" "test.rc"

作者: tireless     时间: 2008-9-10 01:31
嗯,可以了,非常感谢!