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