无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 19225|回复: 33
打印 上一主题 下一主题

怎样在批处理文件用制定的字符串替换目标文件中的字符串

[复制链接]
跳转到指定楼层
1#
发表于 2006-11-17 16:06:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题

该批处理在pe环境中使用,故不用用16位的程序
2#
发表于 2006-11-17 16:26:26 | 只看该作者
Namejm 兄弟给我写过一个批处理,不知道你想怎么替换?
回复

使用道具 举报

3#
 楼主| 发表于 2006-11-17 18:30:30 | 只看该作者
是将reg,inf文件中有关路径的部分替换为批处理制定的路径
回复

使用道具 举报

4#
发表于 2006-11-17 20:13:52 | 只看该作者
  帖一部分内容出来再举个例子就好理解一点——难道是把双斜杠换成单斜杠?
回复

使用道具 举报

5#
 楼主| 发表于 2006-11-19 13:59:21 | 只看该作者
原帖由 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%\
回复

使用道具 举报

6#
 楼主| 发表于 2006-11-19 20:41:43 | 只看该作者
这个问题,毛桃大大再帮我看看
回复

使用道具 举报

7#
发表于 2006-11-19 20:47:29 | 只看该作者
这个我就搞不定了,以前 Namejm 帮我写了个批处理,也是用来替换指定内容,不过里面没有 % 这种特殊字符,这个不大好办啊。看看 Namejm 大侠能不能帮你了
回复

使用道具 举报

8#
发表于 2006-11-19 21:52:43 | 只看该作者
试试把%CD%是当前绝对路径,一般游戏中可以用 . 来代替。 一般是程序的问题。
、---
对不起,我忘了是系统外壳

[ 本帖最后由 忧忧 于 2006-11-19 09:54 PM 编辑 ]
回复

使用道具 举报

9#
发表于 2006-11-19 22:34:21 | 只看该作者
  试试下面的代码(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
复制代码
回复

使用道具 举报

10#
发表于 2006-11-20 01:04:01 | 只看该作者
这个代码要保存,以后有大用。。。
回复

使用道具 举报

11#
 楼主| 发表于 2006-11-20 10:17:41 | 只看该作者
没成功的说

[ 本帖最后由 沙漠之子 于 2006-11-20 10:42 AM 编辑 ]
回复

使用道具 举报

12#
发表于 2006-11-20 13:14:28 | 只看该作者
原帖由 沙漠之子 于 2006-11-20 10:17 AM 发表
没成功的说

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

使用道具 举报

13#
发表于 2006-11-20 15:00:49 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

14#
 楼主| 发表于 2006-11-20 17:59:11 | 只看该作者
原帖由 namejm 于 2006-11-20 01:14 PM 发表

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

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

使用道具 举报

15#
 楼主| 发表于 2006-11-20 18:45:11 | 只看该作者
在网上找到了一个小程序(带源码)

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

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

回复

使用道具 举报

16#
发表于 2006-11-20 19:30:55 | 只看该作者
借助第三方工具的话就不是批处理了,那个工具很大,有100多K,借助第三方工具不如自己按需定做工具,可以做得小一些。
回复

使用道具 举报

17#
 楼主| 发表于 2006-11-20 19:48:01 | 只看该作者
不会的说 我没学过编程
回复

使用道具 举报

18#
发表于 2006-11-20 22:28:01 | 只看该作者
原帖由 沙漠之子 于 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
复制代码
回复

使用道具 举报

19#
 楼主| 发表于 2006-11-21 17:27:52 | 只看该作者
不行的说

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

使用道具 举报

20#
发表于 2006-11-21 19:12:28 | 只看该作者
原帖由 沙漠之子 于 2006-11-21 05:27 PM 发表
不行的说

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

  晕,我所写的代码只是演示性质的,并没有修改1.txt的内容,你没看到是用 echo 语句而没跟重定向符号吗?如果要修改1.txt的内容,加上重定向符号,再稍微处理一下就可以了——原来你一直声称的没有成功居然就是没有修改1.txt的内容啊,有点无语了。
回复

使用道具 举报

21#
 楼主| 发表于 2006-11-21 19:29:33 | 只看该作者
ok拉

谢谢namejm大大,不厌其烦的讲解
回复

使用道具 举报

22#
 楼主| 发表于 2006-11-21 19:52:07 | 只看该作者
能否做成通用性的"小程序",如支持参数

设想:
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 编辑 ]
回复

使用道具 举报

23#
发表于 2006-11-21 20:05:11 | 只看该作者
  由于CMD命令的局限性,不太适合处理复杂的字符串(比如 set /p 语句不接受>、|之类的输入),要做成通用性的小程序是不可完成的任务。但是,如果要求不高,做成略带通用性的小程序倒是可以办到的——这里所说的要求不高,意味着条件比较苛刻。
回复

使用道具 举报

24#
 楼主| 发表于 2006-11-21 20:11:57 | 只看该作者
能否仔细讲讲四个set语句的作用
回复

使用道具 举报

25#
 楼主| 发表于 2006-11-21 20:17:19 | 只看该作者
原帖由 namejm 于 2006-11-21 08:05 PM 发表
果要求不高

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

使用道具 举报

26#
发表于 2006-11-21 20:18:36 | 只看该作者
原帖由 沙漠之子 于 2006-11-21 08:11 PM 发表
能否仔细讲讲四个set语句的作用

  你指的是哪四个 set 语句?如果有不明白的地方,CMD窗口下输入 set /? 马上就出来了。如果还想知道更详细的内容,请在CMD下输入 %systemroot%\help\ntcmds.chm。
回复

使用道具 举报

27#
发表于 2006-11-21 20:27:27 | 只看该作者
原帖由 沙漠之子 于 2006-11-21 08:17 PM 发表

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

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

使用道具 举报

28#
 楼主| 发表于 2006-11-21 20:42:29 | 只看该作者
原帖由 namejm 于 2006-11-21 08:27 PM 发表

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


那麽就约定

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

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

使用道具 举报

29#
发表于 2006-11-21 21:02:10 | 只看该作者
原帖由 沙漠之子 于 2006-11-21 08:42 PM 发表


那麽就约定

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

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

  最简单的办法,也就是偷懒的办法:对%不做任何处理:)原因是:形如%1%%abc%这样的字符串究竟该如何处理?如果要用批处理来做判断的话,那将是一串很可观的代码,或者给你的电脑带来“有点卡”的感觉。
回复

使用道具 举报

30#
 楼主| 发表于 2006-11-21 21:16:01 | 只看该作者
如果不用%cd%,如何将%SYSTEMDRIVE%\Programs\Office\Atlantis\的路径
替换为当前目录路径呢

郁闷这样%1%%abc%的路径也合法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-16 00:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表