![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 18:01 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]如何替换字符串中的某一部分字符 |
| 可打印版本 2,028 / 10 |
| 第1楼 zhaxi | 发表于 2006-07-01 16:44 |
| 初级用户 发帖 40 积分 112 | |
|
[已结]如何替换字符串中的某一部分字符 我想将下列文本中的d:\dos 替换成 另外一个路径 f:\new 该怎么做啊?
======================== d:\dos\35选7.bat d:\dos\CMD 命令速查手册.cmd d:\dos\cmd_help.htm d:\dos\game\game.bat d:\dos\Lan\hostname.txt ======================== 希望高手给出一个好的办法,而且要扩展性比较强。比如把此题中d:\dos换成了d:\1\1\1\dos也能够实现。 [ Last edited by zhaxi on 2006-7-1 at 23:09 ] |
|
| 第2楼 namejm | 发表于 2006-07-01 17:49 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
假设你的这段文本保存在test.txt中,把这段代码放到test.txt同名目录下即可。
|
|
| 第3楼 zhaxi | 发表于 2006-07-01 23:09 |
| 初级用户 发帖 40 积分 112 | |
|
谢谢你给我提供了!new:~7!这样的好用法。
不过我不能理解你要以 “.” 为分隔符分开成%%i,和%%j,这样做的话如果路径中含有d:\dos\ver3.2\3.txt 时,具有2个 . ,则会语句失效。我把它改成了/,这样还保证会把每行路径都全部传递给%%i,不怕有空格的情形。 @echo off setlocal enabledelayedexpansion for /f "eol== tokens=1 delims=/" %%i in (test.txt) do ( echo %%i|find "d:\dos">nul 2>nul && set new=%%i echo f:\new\!new:~7!>>1.txt ) del /q test.txt ren 1.txt test.txt start test.txt |
|
| 第4楼 namejm | 发表于 2006-07-01 23:52 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
Re zhaxi:
观察你提供的文本文件,并没有在同一行中出现两个点号的情况,所以我要利用一切可利用的条件:)其实,用点号作为分隔符确实存在你说的执行失败的情况,但是因为某些行中存在空格,所以不可能用空格来分隔,此时用点号作分隔符似乎是唯一的选择。 但是执行你的代码,确实工作得很好,真让我好生疑惑:文本中并没有斜杠符号呀,怎么可以用/作分隔符呢?哪位能解释一下? |
|
| 第5楼 zhaxi | 发表于 2006-07-02 15:43 |
| 初级用户 发帖 40 积分 112 | |
|
因为根据我观察,所有路径的分割符不都是 \ 吗,不可能出现 / 。 哈哈所以我用它分割可以把每行字符都赋予给%%i啊。
|
|
| 第6楼 zhaxi | 发表于 2006-07-02 16:20 |
| 初级用户 发帖 40 积分 112 | |
|
另外我在想:如果要把这个语句扩展到所有情况,该如何实现。
此处d:\dos\里含有7个字符,如果换成别的目录如d:\dos\dos\则含有11个字符了。 此时可以通过什么语句把一行字符的长度取出来呢? 还望指点。 |
|
| 第7楼 zhaxi | 发表于 2006-07-02 16:39 |
| 初级用户 发帖 40 积分 112 | |
|
哈哈。我有了更好的办法实现这个扩展了。利用%PATH:STR1=STR2%,就不用管d:\dos有多长的字符了。
现在把最终的代码公布如下: 上述代码保存为compare.bat,使用compare.bat %1 %2调用就可以了。 [ Last edited by zhaxi on 2006-7-2 at 22:46 ] |
|
| 第8楼 zhaxi | 发表于 2006-07-02 16:45 |
| 初级用户 发帖 40 积分 112 | |
|
不过还是想问下
“可以通过什么语句把一行字符的长度取出来呢”? 因为不知道用什么做分割符,哈哈 |
|
| 第9楼 namejm | 发表于 2006-07-02 17:20 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
在文本中没有出现的字符可以用来做for中的分隔符吗?要是这样也可以的话,我的天呐……我还是没转过弯来。
统计字符串的字符个数的代码如下(暂时没法统计含有引号的字符串): |
|
| 第10楼 zhaxi | 发表于 2006-07-02 22:48 |
| 初级用户 发帖 40 积分 112 | |
|
你真是厉害。多谢提供代码。
我还以为要用for呢,所以我不知道取哪个分割符。 |
|
| 第11楼 namejm | 发表于 2006-07-02 23:14 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
Re zhaxi:
你在7楼的代码还有几处有待修改,分别是: @echo on 一句应该改成@echo off,后面的@echo off可以删掉; if exist d:\f1.txt del d:\f1.txt /q 一句可以省去,因为后面的dir ……>d:\f1.txt一句中用到了单个的重定向符号>,此句的输出内容会把以前存在的f1.txt覆盖掉; dir %1\ /s /b > d:\f1.txt 一句中应该再加上参数 /a,防止漏掉隐藏文件。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |