我想创建一个.bat文件,它可以让我选择在不同的服务器之间进行选择并执行停止/启动服务等操作。到目前为止,我收到系统错误67.无法找到网络名称。有一个更好的方法吗。或者我可以从弹出选项中选择服务器名称。
@ECHO OFF
CLS
ECHO 1.server1
ECHO 2.server2
ECHO 3.server3
ECHO 4.server4
ECHO.
set /p server_name=Enter server name:
IF %server_name%== 1 GOTO app1
IF %server_name%== 2 GOTO app2
IF %server_name%== 3 GOTO app3
IF %server_name%== 4 GOTO app4
:app1
call:restart "server1"
GOTO End
:app2
call:restart "server2"
GOTO End
:app3
call:restart "server3"
GOTO End
:app4
call:restart "server4"
GOTO End
:restart
net use \\%~1/User:%username%
SC \\%~1 Stop service
timeout 10
SC \\%~1 Start service
GOTO End
答案 0 :(得分:0)
我想给你一个不同的解决方案,而不是调试你的文件:
在要重新启动服务的服务器上,创建此bat文件:
@ECHO OFF
:STOP
SC STOP <your_service>
ping 127.0.0.1 -n 6 > nul
SC QUERY <your_service> | find /I "STATE" | find "STOPPED"
if errorlevel 1 goto :STOP
SC START <your_service>
现在,使用任务计划程序在服务器上创建任务。不要设置任何触发器,而是让任务执行新创建的bat文件。选择您需要的任何选项(例如具有特定密码的特定用户,是否在没有人登录时运行脚本,是否使用管理员priveledges运行它等)并命名(your_task)。
最后,像这样修改你的脚本:
@ECHO OFF
CLS
ECHO 1.server1
ECHO 2.server2
ECHO 3.server3
ECHO 4.server4
ECHO.
:SELECT
set /p server_name=Enter server name:
IF %server_name%==1 GOTO app1
IF %server_name%==2 GOTO app2
IF %server_name%==3 GOTO app3
IF %server_name%==4 GOTO app4
GOTO SELECT
:app1
SCHTASKS /RUN /S "server1" /TN "your_task"
GOTO End
:app2
SCHTASKS /RUN /S "server2" /TN "your_task"
GOTO End
:app3
SCHTASKS /RUN /S "server3" /TN "your_task"
GOTO End
:app4
SCHTASKS /RUN /S "server4" /TN "your_task"
GOTO End
:End
如果需要,您还可以将用户和密码传递给SCHTASKS
命令。
应该清楚它是如何工作的。我建议仔细看看第一个bat文件。使用这个:
SC \\%~1 Stop service
timeout 10
SC \\%~1 Start service
可能会造成麻烦。由于各种原因,有时服务不会在10秒内停止。尝试在服务尚未停止时启动服务,将导致错误,服务将保持停止状态。
相反,我们在计划任务中的bat脚本将尝试停止服务,然后等待5秒(是的,-n 6表示5秒^^)然后它将检查服务是否具有状态“STOPPED” 。如果是,它将启动它,否则,它将重新尝试停止它,等待5秒以上等等。