[在线求解] 用bat脚本实现set命令替换以变量形式的字符串
1.setstartport=33062.setendport=33153.setposition_port=%startport%4.setbasedir=E:\MyS...
1.set startport=3306
2.set endport=3315
3.set position_port=%startport%
4.set basedir=E:\MySQL\MySQL Server 5.1-position\bin\
5.:domysql
6.set "basedir=%basedir:position=%position_port%"
7.cd %basedir%
8.--循环执行mysql的stop slave;操作
9.set /a position_port += 1
10.if %endport% geq %position_port% goto domysql
因为我有台服务器安装了多mysql实现镜像备份,对应的目录分别为
E:\MySQL\MySQL Server 5.1-3306\bin\
E:\MySQL\MySQL Server 5.1-3307\bin\
E:\MySQL\MySQL Server 5.1-3308\bin\ 等等
我想用脚本实现自动 stop slave;
如果单纯的 set "basedir=%basedir:position=3307" 是可以替换的,用循环传变量总是不行,有谁能帮忙处理下set命令中 替换后的部分 是否可以用变量来传值进行替换
也就是类似6.set "basedir=%basedir:position=%position_port%"
请各位帮忙,谢谢 (我的邮箱46219596@qq.com,方便的话请直接发邮箱,万分感谢) 展开
2.set endport=3315
3.set position_port=%startport%
4.set basedir=E:\MySQL\MySQL Server 5.1-position\bin\
5.:domysql
6.set "basedir=%basedir:position=%position_port%"
7.cd %basedir%
8.--循环执行mysql的stop slave;操作
9.set /a position_port += 1
10.if %endport% geq %position_port% goto domysql
因为我有台服务器安装了多mysql实现镜像备份,对应的目录分别为
E:\MySQL\MySQL Server 5.1-3306\bin\
E:\MySQL\MySQL Server 5.1-3307\bin\
E:\MySQL\MySQL Server 5.1-3308\bin\ 等等
我想用脚本实现自动 stop slave;
如果单纯的 set "basedir=%basedir:position=3307" 是可以替换的,用循环传变量总是不行,有谁能帮忙处理下set命令中 替换后的部分 是否可以用变量来传值进行替换
也就是类似6.set "basedir=%basedir:position=%position_port%"
请各位帮忙,谢谢 (我的邮箱46219596@qq.com,方便的话请直接发邮箱,万分感谢) 展开
展开全部
我感觉用字符替换实现比较难,还容易出错,还是循环容易些。
你看这样符合你的要求吗?
@echo off
setlocal EnableDelayedExpansion
set startport=3306
set endport=3315
for /l %%i in (%startport%,1,%endport%) do (
set basedir=E:\MySQL\MySQL Server 5.1-%%i\bin
echo !basedir!
rem call domysql
)
另外你用循环传变量替换不成功也可能与变量延迟有关,你还可以按你的方法再试试。
打开变量延迟 setlocal EnableDelayedExpansion 循环内变量用!代替 %
你看这样符合你的要求吗?
@echo off
setlocal EnableDelayedExpansion
set startport=3306
set endport=3315
for /l %%i in (%startport%,1,%endport%) do (
set basedir=E:\MySQL\MySQL Server 5.1-%%i\bin
echo !basedir!
rem call domysql
)
另外你用循环传变量替换不成功也可能与变量延迟有关,你还可以按你的方法再试试。
打开变量延迟 setlocal EnableDelayedExpansion 循环内变量用!代替 %
追问
谢谢!bat中的for循环能解释下嘛,我想学习下!
下面是重写的方法已ok,麻烦找茬!
@echo off
setlocal EnableDelayedExpansion
set startport=3306
set endport=3315
set position_port=%startport%
set basedir=E:\MySQL\MySQL Server 5.1-position\bin\
:domysql
set basedirnew=!basedir:position=%position_port%!
echo !basedirnew!
set /a position_port += 1
if %endport% geq %position_port% goto domysql
追答
测试了一下,你的代码没问题,说明你的学习能力很强,祝贺你。
for用法很多,也比较复杂,自认为是dos批处理的难点也是亮点。
for /l 相对来说比较容易
for /l %%i in (%startport%,1,%endport%)
相当于vbs 的
for i=startport to endport step 1
另:提醒一下!basedirnew!路径中带空格,引用时一定要带着文件名、参数用双引号扩起来。
2011-07-09
展开全部
在这里说吧,把你给的这句写成这样:
call set "basedir=%%basedir:%position%=%position_port%%%"
call set "basedir=%%basedir:%position%=%position_port%%%"
追问
安装您的说话我改为下面执行也不成功替换【position是个字符,不是变量,所以我去掉啦%%】
set startport=3306
set endport=3315
set position_port=%startport%
set basedir=E:\MySQL\MySQL Server 5.1-position\bin\
:domysql
set basedir=%%basedir:position=%position_port%%%
echo %basedir%
cd \
set /a position_port += 1
if %endport% geq %position_port% goto domysql
pause
追答
错啦,你没看见我前面加了个call
这句:set basedir=%%basedir:position=%position_port%%%
应该如此:
call set basedir=%%basedir:position=%position_port%%%
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询