当脚本运行时,当它发现一台机器无法访问时,我希望它跳过它。并仅为在线PC执行psexec命令
我创建了一个bat文件,如下所示,但它无法正常工作
@echo off
setlocal
:begin
for /f %%a in (computerlist.txt) do (
ping -n 1 %%a >NUL 2>NUL
if %errorlevel%==0 (
psexec \\%%a -u user -p password -i -d "d:\path\command.exe"
) else echo Skipping unreachable host %%a
)
endlocal
答案 0 :(得分:1)
wmic /node:"@computerlist.txt" /failfast:on process call create "c:\\windows\\notepad.exe"
它不会等待快速回答的电脑。记事本在远程计算机上不可见,但在本地计算机上不可见。
答案 1 :(得分:0)
您需要在代码中添加Setlocal EnableDelayedExpansion
并访问错误级别!errorlevel!
:
@echo off
Setlocal EnableDelayedExpansion
for /f %%a in (computerlist.txt) do (
ping -n 1 %%a >NUL 2>NUL
if !errorlevel!==0 (
psexec \\%%a -u user -p password -i -d "d:\path\command.exe"
) else echo Skipping unreachable host %%a
)
问题是通常在解析时评估变量。因此,如果您使用%errorlevel%
,它将始终包含第一个设定值。 EnableDelayedExpansion
会在执行时强制进行评估,因此!errorlevel!
将始终包含最后指定的值(而%errorlevel%仍将包含第一个值)。在您的情况下,变量可能会在循环的每次迭代时发生变化,因此您显然需要!errorlevel!
。
有关详细信息,请查看http://ss64.com/nt/delayedexpansion.html。