无忧启动论坛

标题: 怎样在批处理文件用制定的字符串替换目标文件中的字符串 [打印本页]

作者: 沙漠之子    时间: 2006-11-17 16:06
标题: 怎样在批处理文件用制定的字符串替换目标文件中的字符串
如题

该批处理在pe环境中使用,故不用用16位的程序
作者: 老毛桃    时间: 2006-11-17 16:26
Namejm 兄弟给我写过一个批处理,不知道你想怎么替换?
作者: 沙漠之子    时间: 2006-11-17 18:30
是将reg,inf文件中有关路径的部分替换为批处理制定的路径
作者: namejm    时间: 2006-11-17 20:13
  帖一部分内容出来再举个例子就好理解一点——难道是把双斜杠换成单斜杠?
作者: 沙漠之子    时间: 2006-11-19 13:59
原帖由 namejm 于 2006-11-17 08:13 PM 发表
  帖一部分内容出来再举个例子就好理解一点——难道是把双斜杠换成单斜杠?


  1. "Classes\Atlantis_Rich.Document\shell\open\command", "","%SYSTEMDRIVE%\Programs\Office\Atlantis\Atlantis.exe ""%1"""
复制代码


将%SYSTEMDRIVE%\Programs\Office\Atlantis\ 替换为%cd%\
作者: 沙漠之子    时间: 2006-11-19 20:41
这个问题,毛桃大大再帮我看看
作者: 老毛桃    时间: 2006-11-19 20:47
这个我就搞不定了,以前 Namejm 帮我写了个批处理,也是用来替换指定内容,不过里面没有 % 这种特殊字符,这个不大好办啊。看看 Namejm 大侠能不能帮你了
作者: 忧忧    时间: 2006-11-19 21:52
试试把%CD%是当前绝对路径,一般游戏中可以用 . 来代替。 一般是程序的问题。
、---
对不起,我忘了是系统外壳

[ 本帖最后由 忧忧 于 2006-11-19 09:54 PM 编辑 ]
作者: namejm    时间: 2006-11-19 22:34
  试试下面的代码(XP下测试通过):

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (1.txt) do (
  4.     set var=%%i
  5.     set "var=!var:%%=☆!"
  6.     set var=!var:☆SYSTEMDRIVE☆\Programs\Office\Atlantis\=☆cd☆\!
  7.     set "var=!var:☆=%%!"
  8. )
  9. echo %var%
  10. pause
复制代码

作者: strongchen    时间: 2006-11-20 01:04
这个代码要保存,以后有大用。。。
作者: 沙漠之子    时间: 2006-11-20 10:17
没成功的说

[ 本帖最后由 沙漠之子 于 2006-11-20 10:42 AM 编辑 ]
作者: namejm    时间: 2006-11-20 13:14
原帖由 沙漠之子 于 2006-11-20 10:17 AM 发表
没成功的说

  你是在PE环境下吧?在XP下应该没问题的。对了,你说的 %cd% 是指字符串本身,还是表示当前路径?%SYSTEMDRIVE% 也是同样的含义吗?
作者: chowyu    时间: 2006-11-20 15:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沙漠之子    时间: 2006-11-20 17:59
原帖由 namejm 于 2006-11-20 01:14 PM 发表

  你是在PE环境下吧?在XP下应该没问题的。对了,你说的 %cd% 是指字符串本身,还是表示当前路径?%SYSTEMDRIVE% 也是同样的含义吗?

%cd%指当前路径
%SYSTEMDRIVE%是字符串
作者: 沙漠之子    时间: 2006-11-20 18:45
在网上找到了一个小程序(带源码)

strrpcV10--批处理增加替换文本.zip

58.32 KB, 下载次数: 349, 下载积分: 无忧币 -2


作者: lxl1638    时间: 2006-11-20 19:30
借助第三方工具的话就不是批处理了,那个工具很大,有100多K,借助第三方工具不如自己按需定做工具,可以做得小一些。
作者: 沙漠之子    时间: 2006-11-20 19:48
不会的说 我没学过编程
作者: namejm    时间: 2006-11-20 22:28
原帖由 沙漠之子 于 2006-11-20 05:59 PM 发表

%cd%指当前路径
%SYSTEMDRIVE%是字符串


  如果是这样的话,把我以前的代码稍加修改就可以满足需要了——仍然是在XP下测试通过,我没PE环境。

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (1.txt) do (
  4.     set var=%%i
  5.     set "var=!var:%%=☆!"
  6.     set var=!var:☆SYSTEMDRIVE☆\Programs\Office\Atlantis\=%cd%\!
  7.     set "var=!var:☆=%%!"
  8. )
  9. echo %var%
  10. pause
复制代码

作者: 沙漠之子    时间: 2006-11-21 17:27
不行的说

运行之后,1.txt 文件并没有被修改
作者: namejm    时间: 2006-11-21 19:12
原帖由 沙漠之子 于 2006-11-21 05:27 PM 发表
不行的说

运行之后,1.txt 文件并没有被修改

  晕,我所写的代码只是演示性质的,并没有修改1.txt的内容,你没看到是用 echo 语句而没跟重定向符号吗?如果要修改1.txt的内容,加上重定向符号,再稍微处理一下就可以了——原来你一直声称的没有成功居然就是没有修改1.txt的内容啊,有点无语了。
作者: 沙漠之子    时间: 2006-11-21 19:29
ok拉

谢谢namejm大大,不厌其烦的讲解
作者: 沙漠之子    时间: 2006-11-21 19:52
能否做成通用性的"小程序",如支持参数

设想:
streplace 原字符串 目标字符串 目标文件

set origin=%1
set object=%2
set file=%3

%%CD%%  表示输入%CD%
%CD%  表示扩充完整目录,为字符串


但是如何将输入,如%SYSTEMDRIVE%\Programs\Office\Atlantis\
变成☆SYSTEMDRIVE☆\Programs\Office\Atlantis\
及%%CD%% 变成%CD%
不清楚

[ 本帖最后由 沙漠之子 于 2006-11-21 07:56 PM 编辑 ]
作者: namejm    时间: 2006-11-21 20:05
  由于CMD命令的局限性,不太适合处理复杂的字符串(比如 set /p 语句不接受>、|之类的输入),要做成通用性的小程序是不可完成的任务。但是,如果要求不高,做成略带通用性的小程序倒是可以办到的——这里所说的要求不高,意味着条件比较苛刻。
作者: 沙漠之子    时间: 2006-11-21 20:11
能否仔细讲讲四个set语句的作用
作者: 沙漠之子    时间: 2006-11-21 20:17
原帖由 namejm 于 2006-11-21 08:05 PM 发表
果要求不高

路径字符串(不含特殊的字符)的替换
作者: namejm    时间: 2006-11-21 20:18
原帖由 沙漠之子 于 2006-11-21 08:11 PM 发表
能否仔细讲讲四个set语句的作用

  你指的是哪四个 set 语句?如果有不明白的地方,CMD窗口下输入 set /? 马上就出来了。如果还想知道更详细的内容,请在CMD下输入 %systemroot%\help\ntcmds.chm。
作者: namejm    时间: 2006-11-21 20:27
原帖由 沙漠之子 于 2006-11-21 08:17 PM 发表

路径字符串(不含特殊的字符)的替换

  在系统的环境变量中,有好几个变量代表特定的路径,此外,%cd%代表当前路径,此时,如果要用到 %systemroot% 之类的系统环境变量或者%cd%的话,也就意味着要处理特殊字符。而在你这个主题中,对有的特殊字符串当作字符串来处理,有的却依照环境变量的含义来引用,会造成同一批次的处理中,对特殊字符要做不同类型的处理,虽然这样勉强能办到,但是却势必增加代码的复杂性。
作者: 沙漠之子    时间: 2006-11-21 20:42
原帖由 namejm 于 2006-11-21 08:27 PM 发表

  在系统的环境变量中,有好几个变量代表特定的路径,此外,%cd%代表当前路径,此时,如果要用到 %systemroot% 之类的系统环境变量或者%cd%的话,也就意味着要处理特殊字符。而在你这个主题中,对有的特殊字符 ...


那麽就约定

两个%连用,说明该字符串作一般字符处理,并除去多余的%

单个%出现,说明该字符串作环境变量使用
作者: namejm    时间: 2006-11-21 21:02
原帖由 沙漠之子 于 2006-11-21 08:42 PM 发表


那麽就约定

两个%连用,说明该字符串作一般字符处理,并除去多余的%

单个%出现,说明该字符串作环境变量使用

  最简单的办法,也就是偷懒的办法:对%不做任何处理:)原因是:形如%1%%abc%这样的字符串究竟该如何处理?如果要用批处理来做判断的话,那将是一串很可观的代码,或者给你的电脑带来“有点卡”的感觉。
作者: 沙漠之子    时间: 2006-11-21 21:16
如果不用%cd%,如何将%SYSTEMDRIVE%\Programs\Office\Atlantis\的路径
替换为当前目录路径呢

郁闷这样%1%%abc%的路径也合法
作者: namejm    时间: 2006-11-21 21:22
  如果只是要把 %SYSTEMDRIVE%\Programs\Office\Atlantis\ 替换为当前路径,建议你还是以9F或者18F的代码为基础,稍做扩充再来使用,在特殊情况面前,通用性难以兼顾。
作者: tantan222    时间: 2006-11-21 22:33
暂时看不懂,谢谢!!!
作者: haonan3344    时间: 2009-4-17 19:58
找个win32编译的sed,应该也可以吧 :)
作者: gmy    时间: 2009-4-18 22:17
用 fr.exe  小工具。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3