原始的代码是这样的:
@echo.服务启动......
@echo off
@sc create Consul binpath= "D:\Consul\consul_1.18.1_windows_amd64\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect 1 -data-dir D:\Consul\consul_1.18.1_windows_amd64\mydata "
@net start Consul
@sc config Consul start= AUTO
@echo.Consul start is OK......success
@pause
双击运行之后报错:
具体原因可能是,在运行.bat文件时,系统去找目录时并不会去你的其它盘符找,而是直接去C盘找,这就导致了系统找不到指定文件,但是服务是创建成功了的。可以尝试一下以管理员身份运行以下命令:(反正我是没成功,但是有些人的是可以的)
setx ComSpec %SystemRoot%\system32\cmd.exe /m
在运行之前记得先删除你原来运行失败所创建的服务:
sc delete Consul
接下来就是我的解决方案,既然指定路径系统找不到,可以想一下我们平时设置系统变量的时候都是定义一个Key,值为路径,所以也可以试一下这种办法,将我们的启动目录以及持久化存储目录都赋值给指定的key,再引用这些指定的key来驱动程序,而不是直接硬编码,代码如下:
@echo off
@echo 服务启动...
@set "consulPath=D:\Consul\consul_1.18.1_windows_amd64\consul.exe"
@set "dataDir=D:\Consul\consul_1.18.1_windows_amd64\mydata"
@sc create Consul binpath= "%consulPath% agent -server -ui -bind=127.0.0.1
-client=0.0.0.0 -bootstrap-expect 1 -data-dir %dataDir%"
@net start Consul
@sc config Consul start= AUTO
@echo Consul start is OK... success
@pause
运行之前记得删除原来创建的服务,不然可能会报错,运行结果如下:
访问也没问题啦!
不需要关注这个中文乱码问题,要解决也很简单,设置一下编码方式即可,至于为什么这样可以,也许是原始脚本在路径中有一些问题(我没发现),可能是因为不可见字符或其他格式问题导致的。在修改中尝试使用了明确的变量来表示路径,并使用双引号来包裹路径,这有助于确保路径中的空格或其他特殊字符被正确处理。