[在线求解] 用bat脚本实现set命令替换以变量形式的字符串
发布网友
发布时间:2022-04-15 07:49
我来回答
共2个回答
热心网友
时间:2022-04-15 09:19
我感觉用字符替换实现比较难,还容易出错,还是循环容易些。
你看这样符合你的要求吗?
@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!路径中带空格,引用时一定要带着文件名、参数用双引号扩起来。
热心网友
时间:2022-04-15 10:37
在这里说吧,把你给的这句写成这样:
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%%%