如何以固定的顺序而不是随机地连接到bat文件中列出的服务器



bat文件一次连接35个服务器,但它们是随机连接的,而不是我在bat中提到的。我需要连接我在bat上列出的第一台服务器,但它们无法连接。如果你能帮我,我将不胜感激

start cmdkey /generic:"10.151.12.201" /user:"nas" /pass:"itti@123$"
start cmdkey /generic:"10.151.13.201" /user:"nas" /pass:"itti@123$"
start cmdkey /generic:"10.151.27.11" /user:"nas" /pass:"itti@123$"
start cmdkey /generic:"10.151.28.11" /user:"nas" /pass:"itti@123$"
start cmdkey /generic:"10.151.29.11" /user:"nas" /pass:"itti@123$"
start cmdkey /generic:"10.151.31.11" /user:"nas" /pass:"itti@123$"
start cmdkey /generic:"10.151.32.11" /user:"nas" /pass:"itti@123$"
start cmdkey /generic:"10.151.33.11" /user:"nas" /pass:"itti@123$"
start cmdkey /generic:"10.151.35.11" /user:"nas" /pass:"itti@123$"
start cmdkey /generic:"10.151.36.11" /user:"nas" /pass:"itti@123$"
start mstsc /admin /w:1600 /v:"10.151.12.201"
start mstsc /admin /w:1600 /v:"10.151.13.201"
start mstsc /admin /w:1600 /v:"10.151.27.11"
start mstsc /admin /w:1600 /v:"10.151.28.11"
start mstsc /admin /w:1600 /v:"10.151.29.11"
start mstsc /admin /w:1600 /v:"10.151.31.11"
start mstsc /admin /w:1600 /v:"10.151.32.11"
start mstsc /admin /w:1600 /v:"10.151.33.11"
start mstsc /admin /w:1600 /v:"10.151.35.11"
start mstsc /admin /w:1600 /v:"10.151.36.11"

为了让生活稍微轻松一点,您实际上只需要通过使用for循环并只将元变量传递给命令来一次性使用这些命令。在这种情况下,元变量%%i是一个临时变量,它保持当前值,直到do之后的所有命令完成,它将把下一个值分配给%%i

然后,根据您的确切要求(并非100%清楚(,有几个选项:

在每个命令之间添加一个超时,以确保它在下一个命令之前启动:

@echo off
set "range=10.151.12.201 10.151.13.201 10.151.27.11 10.151.28.11 10.151.29.11 10.151.31.11 10.151.32.11 10.151.35.11 10.151.36.11"
for %%i in (%range%) do (
start "" cmdkey.exe /generic:"%%i" /user:"nas" /pass:"itti@123$"
start "" mstsc.exe /admin /w:1600 /v:"%%i"
timeout /t 1
)

然而,由于延迟,启动每个远程会话需要35秒,因此下一步将强制使用条件运算符。原理很简单,如果上一次成功或%errorlevel%exitcode不大于0,&&将告诉系统只启动下一次。

因此,我们使用相同的循环来构建宏,然后启动宏。

@echo off & set mac_cmdkey= & set mac_mstsc=
setlocal enabledelayedexpansion
set "range=10.151.12.201 10.151.13.201 10.151.27.11 10.151.28.11 10.151.29.11 10.151.31.11 10.151.32.11 10.151.35.11 10.151.36.11"
for %%i in (%range%) do (
set "mac_cmdkey=!mac_cmdkey! start "" cmdkey.exe /generic:"%%i" /user:"nas" /pass:"itti@123$" &&"
set "mac_mstsc=!mac_mstsc! start "" mstsc.exe /admin /w:1600 /v:"%%i" &&"
)
set "mac_cmdkey=!mac_cmdkey! echo cmdkey Done"
set "mac_mstsc=!mac_mstsc! echo mstsc Done"
%mac_cmdkey%
%mac_mstsc%

最后,如果意图是一次打开一个,做一些事情,然后关闭并开始下一个,使用start "" /wait

@echo off
set "range=10.151.12.201 10.151.13.201 10.151.27.11 10.151.28.11 10.151.29.11 10.151.31.11 10.151.32.11 10.151.35.11 10.151.36.11"
for %%i in (%range%) do (
start "" /wait cmdkey.exe /generic:"%%i" /user:"nas" /pass:"itti@123$"
start "" /wait mstsc.exe /admin /w:1600 /v:"%%i"
timeout /t 1
)

要按顺序运行命令,请在每行中添加/W/WAIT

start "" /WAIT cmdkey /generic:"10.151.12.201" /user:"nas" /pass:"itti@123$"
start "" /WAIT mstsc /admin /w:1600 /v:"10.151.12.201"

在批处理脚本中,不包含/wait的START命令将运行程序并继续,因此,只包含START命令的脚本将关闭CMD控制台并让新程序继续运行。

START的默认行为是实例化与主进程并行运行的新进程。

/WAIT选项应反转START 的默认"并行运行"行为

请参阅https://ss64.com/nt/start.html

最新更新