中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 字符串替换中的环境变量替换的问题
作者:
标题: 字符串替换中的环境变量替换的问题 上一主题 | 下一主题
wufengseu
新手上路





积分 10
发帖 4
注册 2008-1-8
状态 离线
『楼 主』:  字符串替换中的环境变量替换的问题

目的:将两个文件夹中的VECTORI中的32    202     16     82分别替换为32     202    30    82和 32     202    40    82

setlocal enabledelayedexpansion

set Line2=32    202     16     82

for %%L in (30, 45)         do (

set Line2+=32     202     %%L     82

cd  E:\%%L|| echo "PATH IS INCORRECT..."&pause&exit

for /f "delims=" %%i in (VECTORI) do (
      set str=%%i
Rem为什么不可以??
     set "str=!str:%Line2%=%Line2+%!"  
      echo !str! >> VECTORI+
)
move VECTORI+  VECTORI
)

特向高手求教!

[ Last edited by wufengseu on 2008-1-28 at 10:44 AM ]

2008-1-27 15:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 2 楼』:  

还不如说明下达到什么目的



第一高手    第二高手

2008-1-27 15:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 3 楼』:  

将哪个文件夹里的VECTORI中的32    202     16     82替换成32     202    30    82
将哪个文件夹里的VECTORI中的32    202     16     82替换成32     202    40    82



第一高手    第二高手

2008-1-27 15:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 4 楼』:  

按文件夹名称替换规则吧
@echo off
setlocal enabledelayedexpansion
set "Line=32    202     16     82"
for %%L in (30,45) do (
for /f "delims=" %%i in (%%L\VECTORI) do (
    set "str=%%i"
    set "str=!str:%Line%=32    202     %%L     82!"
    echo !str!>>%%L\VECTORI+
    move %%L\VECTORI+  %%L\VECTORI
))
pause


   此帖被 +1 点积分    点击查看详情   
评分人:【 wufengseu 分数: +1  时间:2008-2-10 15:32




第一高手    第二高手

2008-1-27 16:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wufengseu
新手上路





积分 10
发帖 4
注册 2008-1-8
状态 离线
『第 5 楼』:  

:)正是你说的意思,你的指导非常有用,十分的感谢!!

set的这个用法好。

我试了你给的代码,最后都只剩一行了,不能达到期望目标;原因如下:

@echo off
setlocal enabledelayedexpansion
set "Line=32    202     16     82"
for %%L in (30,45) do (
for /f "delims=" %%i in (%%L\VECTORI) do (
    set "str=%%i"
    set "str=!str:%Line%=32    202     %%L     82!"
    echo !str!>>%%L\VECTORI+
    Rem move out of circle: move %%L\VECTORI+  %%

L\VECTORI

)

move %%L\VECTORI+  %%L\VECTORI
)
pause

不知环境变量能否嵌套使用,例如:
   set "Line+=32    202     %%L     82"
    set "str=!str:%Line%=%Line+%!"
这样是不行的,有没有其它办法呢?

[ Last edited by wufengseu on 2008-1-28 at 11:42 AM ]

2008-1-28 10:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:  

call标签
下面的代码用dir遍历出VECTORI父目录名,也就是不用for /l 了
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /s/a-d/b VECTORI*') do (
       set "str=%%~dpa"
       set "str=!str:~0,-1!.t"
       for /f "delims=" %%i in ("!str!") do call :xxx "%%~ni"
)
pause

:xxx
if "%~1"=="" goto:eof
set "Line1=32    202     16     82"
set "Line2=32    202     %~1     82"
setlocal enabledelayedexpansion
for /f "delims=" %%i in (%~1\VECTORI) do (
    set "str=%%i"
    set "str=!str:%Line1%=%Line2%!"
    echo.!str!>>"%~1\VECTORI+"
)
move "%~1\VECTORI+"  "%~1\VECTORI"
endlocal
goto:eof


   此帖被 +1 点积分    点击查看详情   
评分人:【 wufengseu 分数: +1  时间:2008-2-10 15:32




第一高手    第二高手

2008-1-28 16:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wufengseu
新手上路





积分 10
发帖 4
注册 2008-1-8
状态 离线
『第 7 楼』:  

感谢fastslz的指导,我再学习学习^_^

2008-2-10 15:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xiaocai0077
新手上路





积分 2
发帖 1
注册 2008-1-17
状态 离线
『第 8 楼』:  

恩。我也学习了。这里面有些东西我很有启示

2008-2-10 16:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: