![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-06 04:59 |
共 48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助已结] sed替换带“\”的路径出错 |
| 可打印版本 928 / 9 |
| 第1楼 dooomer | 发表于 2007-10-22 11:09 |
| 初级用户 发帖 52 积分 109 | |
|
[求助已结] sed替换带“\”的路径出错 请大家帮忙。
用的sed版本是ssed。 有一个文本文件(%temp%\a.temp),里面的内容是这样: D:\Game\Quake1\Q3Map\ D:\Game\Quake1\Quoth\ D:\Game\Quake1\Quoth\Warp\ D:\Game\Quake1\ROGUE\ D:\Game\Quake1\SPMod\Bastion\ D:\Game\Quake1\SPMod\BBelief\ D:\Game\Quake1\SPMod\Chapters\ D:\Game\Quake1\SPMod\Contract\ 现在想把前面“D:\Game\Quake1\”这一部分去掉。“D:\Game\Quake1\”是当前目录,所以,我用了 ssed "s#%cd%\##" %temp%\a.temp 可老是不能替换成功,提示"unterminated 's' command" 换过好几个不同版本的sed,结果都一样。请大侠帮忙看看。 [ Last edited by dooomer on 2007-10-23 at 08:31 AM ] |
|
| 第2楼 junchen2 | 发表于 2007-10-22 11:32 |
| 高级用户 发帖 219 积分 537 来自 杭州--半山 | |
|
sed "s/D:\\Game\\Quake1\\//g" %temp%\a.temp
|
|
| 第3楼 dooomer | 发表于 2007-10-22 11:51 |
| 初级用户 发帖 52 积分 109 | |
|
谢谢楼上的,不过这样子没有通用性,因为 %temp%\a.temp 是批处理生成的,如果当前目录不是 D:\Game\Quake1\ 的话,%temp%\a.temp 里面每行开头的路径就也随之变掉了。
|
|
| 第4楼 dooomer | 发表于 2007-10-22 12:14 |
| 初级用户 发帖 52 积分 109 | |
|
奇怪,为什么都已经把默认的分隔符换成#了,还是需要用"\"把路径中的\给转义掉呢?
|
|
| 第5楼 lxmxn | 发表于 2007-10-22 15:53 |
| 版主 发帖 4,938 积分 11,386 | |
|
因为\本来就是sed转义字符,需要另加一个\来转义它本身。
把默认分隔符换成#一般不需要在/前再加\,而在\前仍应该加\来转义\。 |
|
| 第6楼 dooomer | 发表于 2007-10-22 17:07 |
| 初级用户 发帖 52 积分 109 | |
|
啊……这么说的话,我想实现的这个功能用sed还比较麻烦……郁闷。
|
|
| 第7楼 lxmxn | 发表于 2007-10-22 17:40 |
| 版主 发帖 4,938 积分 11,386 | |
|
你先替换\为\\不就可以啦?
|
|
| 第8楼 dooomer | 发表于 2007-10-22 19:32 |
| 初级用户 发帖 52 积分 109 | |
|
嗯,可惜,看来是一定要多生成一个临时文件了。;)
明天再看看吧。谢谢大家。 |
|
| 第9楼 lxmxn | 发表于 2007-10-22 19:36 |
| 版主 发帖 4,938 积分 11,386 | |
|
为什么要生成临时文件?
|
|
| 第10楼 dooomer | 发表于 2007-10-23 08:30 |
| 初级用户 发帖 52 积分 109 | |
|
OK, 基本搞定,代码如下:
=============== cd|ssed -e "s#\\#/#g">%temp%\a.tmp For /f %%B in (%temp%\a.tmp) do set rootdir=%%B =============== echo.>%temp%\a.tmp For /f %%A in ('dir/s/b pak0.pak maps progs.dat *.pk3') do echo %%~dpA>>%temp%\a.tmp =============== TYPE %temp%\a.tmp|uniq.exe|ssed "s#\\#/#g"|ssed "s#%rootdir%/##g">LDATA\LIST_MOD.TXT =============== |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |